元素的总和属性,这些属性在javascript中具有相同的其他属性

时间:2018-11-21 16:05:46

标签: javascript arrays

我有一个包含很多元素的数组。每个元素就像:

e1 = { data: 12345, month: 8, year: 2018 }

使用这个数组,我想创建一个新的具有相同类型的元素数组,但要具有相同月份和相同年份的元素的每个数据的总和。

例如: 如果我的数组是:

myArray = [
    {
        data: 1,
        month: 7,
        year: 2018
    },
    {
        data: 2,
        month: 8,
        year: 2018
    },
    {
        data: 3,
        month: 8,
        year: 2018
    }
]

我想要这个新数组:

myNewArray = [
    {
        data: 1,
        month: 7,
        year: 2018
    },
    {
        data: 5,
        month: 8,
        year: 2018
    }
]

您可以使用javascript函数帮助我吗?

1 个答案:

答案 0 :(得分:0)

您可以使用reduce按月份和年份对元素进行索引,并在找到新元素时递增data

var myArray = [{
    data: 1,
    month: 7,
    year: 2018
  },
  {
    data: 2,
    month: 8,
    year: 2018
  },
  {
    data: 3,
    month: 8,
    year: 2018
  }
];

var grouped = myArray.reduce((acc, curr) => {
  var key = `${curr.year},${curr.month}`;
  if (!(key in acc)) acc[key] = Object.assign({}, curr);
  else acc[key].data += curr.data;
  return acc;
}, {});

console.log(Object.values(grouped));