如果键值相等,如何合并多个对象

Har*_*nan 0 javascript

我有一个对象数组。在每个对象中,我都有“日期”键。如果 'date' 值与另一个对象匹配,我需要添加 'amount' 属性并使其成为一个新对象。

var obj = [
  {
    'date':'2017-02-08T00:00:00.000Z',
    'amount': 20000
  },{
    'date':'2017-02-11T00:00:00.000Z',
    'amount': 65989
  },{
    'date':'2017-02-08T00:00:00.000Z',
    'amount': 256
  },{
    'date':'2017-02-08T00:00:00.000Z',
    'amount': 269
  },{
    'date':'2017-02-11T00:00:00.000Z',
    'amount': 900
  },{
    'date':'2017-02-11T00:00:00.000Z',
    'amount': 6982.99
  },{
    'date':'2017-02-18T00:00:00.000Z',
    'amount': 15248.09
  },
];

Object.keys(obj).map(data1 =>{
  Object.keys(obj).map(data2 =>{
    if(obj[data]['date'] == obj[data2]['date']){
      // i dont know what to do here. 
    }
  }); 
})
Run Code Online (Sandbox Code Playgroud)

我的预期输出应该是

[
  {
    'date':'2017-02-08T00:00:00.000Z',
    'amount': 20525
  },{
    'date':'2017-02-11T00:00:00.000Z',
    'amount': 73,871.99
  },{
    'date':'2017-02-18T00:00:00.000Z',
    'amount': 15248.09
  },
]

Run Code Online (Sandbox Code Playgroud)

请帮我解决它。提前致谢。

afn*_*nan 5

你可以使用

// use reducer 
const all = obj.reduce( (prev, value) => (
  { ...prev, [value.date]: (prev[value.date] || 0) + value.amount } ), {});
console.log(totals);

// to array
console.log(
  Object.entries(all).map( ([key, value]) => ( {date: key, amount: value} ) )
);
Run Code Online (Sandbox Code Playgroud)