🐈
.filter().map()の代わりに.reduce()を使う
はじめに
.filter().map()
を .reduce()
で置き換えられるよ、の実装サンプルです。
mdn にも説明があります。
.filter().map()を使った実装サンプル
与えられた配列から以下を満たす配列を生成したいとします。
- 与えられた配列から偶数のみを取り出す
- 取り出した偶数を 2 倍する
.filter()
と .map()
を使うと以下のように記述できます。
const numbers = [0, 1, 2, 3, 4];
const evenNumbers = numbers.filter((number) => number % 2 === 0);
const doubledEvenNumbers = evenNumbers.map((number) => number * 2);
console.log(doubledEvenNumbers); // [0, 4, 8]
.reduce()で置き換えた実装サンプル
.filter()
と .map()
を使って記述した先ほどのコードは .reduce()
を使うことで以下のように記述できます。
const numbers = [0, 1, 2, 3, 4];
const doubledEvenNumbers = numbers.reduce((prev, curr) => {
if (curr % 2 === 0) {
const doubledEvenNumber = curr * 2;
prev.push(doubledEvenNumber);
}
return prev;
}, []);
console.log(doubledEvenNumbers); // [0, 4, 8]
.filter().map()
の場合だと配列の走査が 2 度必要ですが、.reduce()
を使えば 1 度で済みます。
Discussion