本来の質問
下記のコード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)
})
回答
entries()
は、以下のような配列の配列を作り出します。
[ [ 'name', 'johney' ], [ 'age', 10 ] ]
そして、どちらのコードのラムダ式にも、その配列の要素の配列([ 'name', 'johney' ]
や[ 'age', 10 ]
)が順に渡されます。
コードAでは、それをkeyValue
という引数で受け取ります。
その中身は配列です。
コードBでは、それを[key, value]
という引数で受け取ります。
これは渡される配列と同じ形をしていますね?
その結果、配列はkey
とvalue
に分解されます。
コードでは、そのうちのkey
のみを出力しています。
以下のようにすると、受け取った配列を再現できます。
コードC
code C
falcon = {
name:"johney",
age:10
};
Object.entries(falcon).forEach(([key, value])=>{
console.log([key, value])
})
result
[ 'name', 'johney' ]
[ 'age', 10 ]