JavaScript reduceメソッド

reduceメソッドの使い方をメモ。

forループの場合

var numbers = [1, 2, 3, 4, 5];
var sum = 5;

for(var i = 0; i < numbers.length; i++) {
    sum = sum + numbers[i];
}

console.log(sum);

結果は[20]

reduceの場合

var numbers = [1, 2, 3, 4, 5];

var result = numbers.reduce(function(sum, number){
    return sum + number;
}, 5);

console.log(result);

結果は同じく[20]
reduceは引数を2つ取る。
1つ目はコールバック関数(function(sum, value))。
2つ目はsumの初期値(今回は5)。
コールバック関数にもsumとvalueの引数が2つある。
上記の処理は、①まず、初期値5がsumに、配列の1つ目の要素がvalueに渡され、sumとvalueを足し算した結果がreturnされる。
②次に、①でreturnされた値がsumに、配列の2つ目の要素がvalueに渡され、sumとvalueを足し算した結果がreturnされる。③これを配列要素分、繰り返して、配列の全要素と初期値を足し算した結果が、reduceの結果となる。

上記のように、合計を求めるパターンは一般的なパターン。

少し応用

オブジェクト配列から、必要な値の配列を得る。

var fruits = [
    {name: 'apple' , price: 100},
    {name: 'orange', price: 200},
    {name: 'lemon' , price: 300}
];

// mapで表現する場合
var mapped = fruits.map(function(value){
    return value.name;
});
console.log(mapped);

// reduceで表現する場合
var reduced = fruits.reduce(function(acc, value){
    acc.push(value.name);
    return acc;
}, []);
console.log(reduced);

mappedもreducedも結果は同じ。
mapの機能をreduceで表現することもできる。
上記では、reduceの第2引数の初期値は空配列[]。

まとめ
・reduceは、配列の要素全てを集約するメソッドである。
 足し合わせたり、新しい配列を作成することができる。
・mapと同じ処理をreduceで表現することができる。
・コールバック関数内でのreturn文を忘れないこと。

この記事が気に入ったらサポートをしてみませんか?