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

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

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

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

Q&A

解決済

2回答

537閲覧

for in文がどうしても理解できない

21212121

総合スコア61

JavaScript

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

0グッド

1クリップ

投稿2020/03/18 05:31

現在Javascriptを勉強し始めて4ヶ月ほどになります。
ですが、for in分だけがどうしても理解できません。

for( var 変数 in オブジェクト ) { //ここに繰り返し処理を書く }

簡単だ例文では理解することはできるのですが、下記のような例文をどうしても理解することができません。

React

1 state = { 2 orderForm: { 3 name: { 4 elementType: "input", 5 elementConfig: { 6 type: "text", 7 placeholder: "your name" 8 }, 9 value: "" 10 }, 11 street: { 12 elementType: "input", 13 elementConfig: { 14 type: "text", 15 placeholder: "street" 16 }, 17 value: "" 18 }, 19 zipCode: { 20 elementType: "input", 21 elementConfig: { 22 type: "text", 23 placeholder: "ZIP Code" 24 }, 25 value: "" 26 }, 27 country: { 28 elementType: "input", 29 elementConfig: { 30 type: "text", 31 placeholder: "Country" 32 }, 33 value: "" 34 }, 35 email: { 36 elementType: "input", 37 elementConfig: { 38 type: "email", 39 placeholder: "Your Mail" 40 }, 41 value: "" 42 }, 43 deliveryMethod: { 44 elementType: "select", 45 elementConfig: { 46 options: [ 47 { value: "fastest", diplayValue: "Fastest" }, 48 { value: "cheapest", diplayValue: "Cheapest" } 49 ] 50 }, 51 value: "" 52 } 53 }, 54 loading: false 55 }; 56 57 const formElementsArray = []; 58 for (let key in this.state.orderForm) { 59 formElementsArray.push({ 60 id: key, 61 config: this.state.orderForm[key] 62 }); 63 }

orderFormオブジェクトのプロパティがあるだけ繰り返し処理する機能だと思うのですが、ここではなんの処理をしているのでしょうか?

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

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

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

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

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

guest

回答2

0

ここではなんの処理をしているのでしょうか?

オブジェクトの配列化処理です。

一つ一つの処理は次のように置き換えることができます。

javascript

1const formElementsArray = []; 2for (let key in this.state.orderForm) { 3 let conf = this.state.orderForm[key]; 4 5 console.log( "id : ", key ); 6 console.log( "conf : ", conf ); 7 8 let item = { 9 id: key, 10 config: conf 11 }; 12 formElementsArray.push( item ); 13} 14console.log( formElementsArray );

投稿2020/03/18 05:43

編集2020/03/18 05:44
AkitoshiManabe

総合スコア5434

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

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

21212121

2020/03/18 05:51

ありがとうございます。 無事理解することができました。
guest

0

ベストアンサー

this.state.orderFormから要素をひとつずつ取り出して
整形してformElementsArray配列に後ろから追加しています

投稿2020/03/18 05:36

編集2020/03/18 05:46
yambejp

総合スコア115008

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

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

yambejp

2020/03/18 05:49 編集

やってることはこんな感じ? const formElementsArray = Object.entries(state.orderForm).map(x=>({id:x[0],concfig:x[1]})); thisがどう影響してるかわからないので省略
21212121

2020/03/18 05:50

なるほどです。 理解できました。 ありがとうございます。 なぜmapではなくわざわざfor in文を使うのかが腑に落ちませんでした。 もう一つ質問があるのですが、for in文の中の変数はどんな役割を果たしているのでしょうか?
yambejp

2020/03/18 05:52

> 変数はどんな役割 どの変数の話でしょうか?
21212121

2020/03/18 05:53

for( var 変数 in オブジェクト ) { //ここに繰り返し処理を書く } このvarの部分です
yambejp

2020/03/18 05:56

その変数は、オブジェクトのキーです {aaa:1,bbb:2,ccc:3}ならaaa,bbbb,cccと順番に参照されます 通常のオブジェクトはイテラブルではないのでinで抜き出すしかないです (または例したようにentries,keys,valuesなど利用)
AkitoshiManabe

2020/03/18 06:01

> わざわざ 「例文」でしたら、「for in 文の学習が目的だから」ではないでしょうか。let key の変数宣言は、プロパティ名を受け取る目的のテンポラリ(一時変数)ですね。何にせよ解決されてよかったです。
21212121

2020/03/18 06:02

ありがとうございました。 解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問