質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

358閲覧

objectから値を取得したい

sasurai

総合スコア17

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/02/26 17:40

編集2020/02/26 17:41

初心者のため手探り状態での学習ですが、どなたかご教示いただけたらと思います。

目的:Object.keysを使いdefaultFormItemsのkeyとvalueを取り出すこと

確認したところ:①でkey: empInput ,value: adminが出力されることは確認できます

わからないところ:②でkeyとvalueの値が①と同じ値が出力されることを期待したが、undefindと出力される

var defaultFormItems = {
emInput: 'admin1'
}

var o = Object.keys(defaultFormItems).forEach( function(key) { var value = defaultFormItems[key] console.log('[' + key + '] ' + value);  ① },defaultFormItems) console.log('[' + o.key + '] ' + o.value); ②

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

えっと、①ですが、

JavaScript

1var o = Object.keys(defaultFormItems).forEach( function(key) { 2 var value = defaultFormItems[key] 3 console.log('[' + key + '] ' + value); //  ① 4},defaultFormItems)

まず Object.keys(defaultFormItems) で defaultFormItems のキーをすべて配列として取り出します。defaultFormItems のキーは 'emInput' しかないので 1 要素の配列になります。
次に forEach で配列の各要素に対して無名関数を実行してます。ちなみに forEach の二つ目の引数 defaultFormItems は無名関数の this として使われますが、無名関数では this を使ってないので無意味です。
無名関数では key として 'emInput' が渡された処理が行われます。内容はわかってると思いますので省略します。
最後に、forEach の結果を o に代入してますが、forEach の戻り値は undefined なので、o の値は undefined になります。
参考: Array.prototype.forEach() - JavaScript | MDN

JavaScript

1console.log('[' + o.key + '] ' + o.value); // ②

o が undefined なのでエラーになります。①と同じものを表示したいのであれば o.key の代わりに 'emInput'、o.value の代わりに defaultFormItems['emInput'] または defaultFormItems.emInput と書く必要があります。

投稿2020/02/26 18:40

編集2020/02/26 18:56
hoshi-takanori

総合スコア7901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasurai

2020/02/27 02:13

hoshi-takanori様 丁寧な解説ありがとうございます。 forEachの第二引数の理解が不十分でしたが解説により理解できました。 また、forEachに戻り値がなくundefindとなるところは理解が足りていませんでした。 処理対象の連想配列`defaultFormItems`はkeyを複数追加していくことを前提としておりましたので、今回は、forEachで対応するのではなく、yambejp様から指摘いただいた`Object.assign({}`を使った配列処理をしようと思います。 ご回答ありがとうございました。
guest

0

ベストアンサー

defaultFormItems にkeyが複数あったときにどうするつもりかにもよりますね

javascript

1var o = Object.assign({},{key:Object.keys(defaultFormItems)[0],value:Object.values(defaultFormItems)[0]}); 2console.log('[' + o.key + '] ' + o.value);

投稿2020/02/27 00:48

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasurai

2020/02/27 02:52

ご回答ありがとうございます。 配列処理はforEachでできるという頭でいましたが、ご教示いただいたObject.assignを使えば、forEachを使わなくても繰り返し処理に使用できると言うことが理解できました。
yambejp

2020/02/27 03:14

今更ですが、分割代入すればもっと楽かも var defaultFormItems = { emInput: 'admin1' }; [key,value]=Object.entries(defaultFormItems)[0]; var o = {key,value}; console.log('[' + o.key + '] ' + o.value);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問