オブジェクトの配列に対してreduceを呼び出してプロパティを合計するにはどうすればよいでしょうか? 質問する

オブジェクトの配列に対してreduceを呼び出してプロパティを合計するにはどうすればよいでしょうか? 質問する

a.xの各要素を合計したいとしますarr

arr = [ { x: 1 }, { x: 2 }, { x: 4 } ];
arr.reduce(function(a, b){ return a.x + b.x; }); // => NaN

いつかそうa.xなるだろうと信じる理由が私にはある。undefined

以下は問題なく動作します

arr = [ 1, 2, 4 ];
arr.reduce(function(a, b){ return a + b; }); // => 7

最初の例では何が間違っているのでしょうか?

ベストアンサー1

これを実現するよりクリーンな方法は、 の 2 番目の引数として初期値を指定することですreduce

var arr = [{x:1}, {x:2}, {x:4}];
var result = arr.reduce(function (acc, obj) { return acc + obj.x; }, 0);
console.log(result);  // 7

匿名関数が最初に呼び出されるときは、 で呼び出され(0, {x: 1})、 を返します0 + 1 = 1。次に、 で呼び出され(1, {x: 2})、 を返します1 + 2 = 3。その後、 で呼び出され(3, {x: 4})、最終的に を返します7

これは配列が空の場合も処理し、 を返します0

おすすめ記事