JavaScript/TypeScript
における Array.prototype.reduce()
(以下、reduce()
とする) は配列から単一の値を作るために使われるメソッドである。典型的には次のような使われ方をする。
const total = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reduce((prev: number, curr: number) => {
return prev + curr;
}, 0);
console.log(total); // 55
配列にある複数の要素を、単一の値に reduce (= まとめあげ) している、ということだ。
reduce で、配列を単一のハッシュに変換することもできる。次のような配列を考えよう。
[
{
name: "ケンシロウ",
style: "北斗神拳",
strength: 10,
},
{
name: "ジャギ",
style: "北斗神拳",
strength: 5,
},
{
name: "レイ",
style: "南斗聖拳",
strength: 8,
},
];
これを次のように変換したいとする。
{
"ケンシロウ": {
"style": "北斗神拳",
"strength": 10
},
"ジャギ": {
"style": "北斗神拳",
"strength": 5
},
"レイ": {
"style": "南斗聖拳",
"strength": 8
}
}
この変換は reduce を使うと簡単に実現できる。
const fighters = [
{
name: "ケンシロウ",
style: "北斗神拳",
strength: 10,
},
{
name: "ジャギ",
style: "北斗神拳",
strength: 5,
},
{
name: "レイ",
style: "南斗聖拳",
strength: 8,
},
];
const obj = fighters.reduce((soFar, fighter) => {
soFar[fighter.name] = {
style: fighter.style,
strength: fighter.strength
};
return soFar;
}, {});
reduce の第二引数に指定する初期値が {}
であり、この空のハッシュオブジェクトに順繰りに値をつめていく、という具合である。TypeScript で同等のことを実装してみたので、TypeScript Playground へのリンクもあわせて載せておく。