次の配列が与えられました:mainGroup
ごとにすべてをtimestamp
でグループ化し、real
を合計します。結果の下に私が後だ見る...オブジェクトの配列は、条件が満たされたときに新しい構造に変更されます
var arr = [
{
mainGroup: 'A',
subGroup: 'B',
real: 100,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'A',
subGroup: 'C',
real: 150,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'B',
subGroup: 'D',
real: 123,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'B',
subGroup: 'Y',
real: 542,
timestamp: '2017-01-15T01:00:00.000Z'
}
]
結果は次のようになります。
[
{
A: 250, // 250 is sub B real + sub C real.
B: 665, // 665 is sub D real + sub Y real.
timestamp: '2017-01-15T01:00:00.000Z'
},
]
私のコード今のところ:
var arr = [
{
mainGroup: 'A',
subGroup: 'B',
real: 100,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'A',
subGroup: 'C',
real: 150,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'B',
subGroup: 'D',
real: 123,
timestamp: '2017-01-15T01:00:00.000Z'
},
{
mainGroup: 'B',
subGroup: 'Y',
real: 542,
timestamp: '2017-01-15T01:00:00.000Z'
}
]
let b = arr.reduce((a, item) => {
a[item.timestamp] = a[item.timestamp] || {};
Object.assign(a[item.timestamp], {
[item.mainGroup]: item.real
});
return a;
}, {});
Object.keys(b)
.map(timestamp => Object.assign(b[timestamp], { timestamp }));
console.log(b)
ありがとうございます。あなたは反抗的にアルゴリズムのマスターです:D –
結果の値(配列)は反復ごとに変化しません。常に同じ配列なので、reduceは必要ありませんが、本当にreduceを使いたい場合は、よく –
ええ、私は2つを比較したいです!もう一度ありがとう –