次のようなオブジェクトの特定の値(num)の合計だけを
出すのにmapやeach文でゴニョゴニョ数行書くのやだなぁと思い、
ex = {
id: 1,
childrens: [
{id: 1, num: 1},
{id: 2, num: 3}
]
}
そうだreduceがあると思ったのですが、
シンプルな配列と違って、ちょっと扱いに迷ったので簡単にメモ。
ex.childrens.reduce((sum, obj) =>{return sum + obj.num}, 0);
※0は、初期値。省略すると配列[0]の値。
ちなみに、オブジェクトのオブジェクトの場合、Object.values
を使ってArray化して利用するアイデアも。
ex2 = {
0: {id: 1, num: 1},
1: {id: 2, num: 3}
}
Object.values(ex2).reduce((sum, obj) =>{return sum + obj.num}, 0);
公式:
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
参考:
https://stackoverflow.com/questions/15748656/javascript-reduce-on-object