2017-10-25 4 views
1

私はただの値を割り当てるときにオブジェクトを返そうとしているときに、結果が期待通りではなく、ラムダ関数私にオブジェクトではなく値を返します。JavaScriptのラムダ(矢印)関数は、値の割り当ての瞬間にオブジェクトを返します

ここに私の質問を明確にするためには、コードです:

1)間違ったバリアント(私はそれはlilのビット最短だから)

const a = { 
"a" : "a", 
"b" : "b", 
"c" : "c" 
} 

const res = Object.keys(a).reduce((res, key) => (res[key] = 0), {}); 
console.log(res) // result -> 0; but why, does it return an assigning value in that case? 

2変種(正しいが、少しはそのような何かを使用したいですビット最長)

const a = { 
"a" : "a", 
"b" : "b", 
"c" : "c" 
} 

const res = Object.keys(a).reduce((res, key) => { res[key] = 0; return res; }, {}); 
console.log(res); // { "a" : 0, "b" : 0, "c" : 0 }. It works properly now! 

この瞬間を理解してもらえますか?私はそれが少しばかげた質問だと信じていますが、とにかく私はどんな情報に対しても非常に感謝しています。ありがとう!

+0

共通イディオムはhttps://stackoverflow.com/questions/42974735を参照してください、 'Object.assign'を返すことです/オブジェクトから配列を作成 – georg

+0

あなたに感謝! – Velidan

答えて

6

res[key] = 0のような割り当ては、割り当てられた値 - 0を返します。resを返す必要があります。あなたは最後の値(res)を返すようにcomma operatorを使用することができます。

const a = { 
 
"a" : "a", 
 
"b" : "b", 
 
"c" : "c" 
 
} 
 

 
const res = Object.keys(a).reduce((res, key) => (res[key] = 0, res), {}); 
 
console.log(res)

+1

素晴らしい、reduceの使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce?v=b –

+0

そして?私は同じことを行う - すべてのアイテムを繰り返し、1つに減らすアイテム=) – Velidan

+0

Ori Drori、説明をくれてありがとう! – Velidan

関連する問題