Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

forEachの引数で分からない点

Q&A

Closed

forEachの中の関数の引数を配列型にしたらそれまでにあった配列が消えたんですがどういうことですか?
頭がごちゃごちゃになってしまい質問しました。
良ければ教えてほしいです。

falcon = {
    name:"johney",
    age:10
    }
  ;


  Object.entries(falcon).forEach(([key,value])=>{

      console.log(key)
  })

0

1Answer

本来の質問

下記のコードAのforEachのラムダ式の引数を、コードBのように配列型にしたら、結果出力が配列でなくなってしまいました。
なぜ、このようになったのでしょうか?

コードA

code A
falcon = {
    name:"johney",
    age:10
};

Object.entries(falcon).forEach((keyValue)=>{
    console.log(keyValue)
})
result
[ 'name', 'johney' ]
[ 'age', 10 ]

コードB

code B
falcon = {
    name:"johney",
    age:10
};

Object.entries(falcon).forEach(([key, value])=>{
    console.log(key)
})
result
name
age

回答

entries()は、以下のような配列の配列を作り出します。
[ [ 'name', 'johney' ], [ 'age', 10 ] ]
そして、どちらのコードのラムダ式にも、その配列の要素の配列([ 'name', 'johney' ][ 'age', 10 ])が順に渡されます。

コードAでは、それをkeyValueという引数で受け取ります。
その中身は配列です。

コードBでは、それを[key, value]という引数で受け取ります。
これは渡される配列と同じ形をしていますね?
その結果、配列はkeyvalueに分解されます。
コードでは、そのうちのkeyのみを出力しています。

以下のようにすると、受け取った配列を再現できます。

コードC

code C
falcon = {
    name:"johney",
    age:10
};

Object.entries(falcon).forEach(([key, value])=>{
    console.log([key, value])
})
result
[ 'name', 'johney' ]
[ 'age', 10 ]
1Like

Comments

  1. めっちゃわかりやすかったです。ありがとうございます。

Your answer might help someone💌