我有大量的数据。这是结构示例:

let data = [
  {
    date: '2018-11-22',
    values: {
      a: 10,
      b: 20,
      c: 5,
    },
  },
  {
    date: '2018-11-17',
    values: {
      a: 5,
      b: 10,
      c: 15,
    },
  },
  {
    date: '2018-06-29',
    values: {
      a: 10,
      b: 30,
      c: 10,
    },
  },
  {
    date: '2017-12-20',
    values: {
      a: 30,
      b: 40,
      c: 5,
    },
  },
];


我需要按月份和年份将数据整理成新的数组。值属性应每月汇总。

因此,该示例的新数组应如下所示:

let sortedData = [
  {
    date: '2018-11',
    values: {
      a: 15,
      b: 30,
      c: 20,
    },
  },
  {
    date: '2018-06',
    values: {
      a: 10,
      b: 30,
      c: 10,
    },
  },
  {
    date: '2017-12',
    values: {
      a: 30,
      b: 40,
      c: 5,
    },
  },
];


我试图用几个小时来编写一个工作功能,但我无法处理。
有什么想法可以像这样捆绑一个数组吗?

谢谢你的帮助!

最佳答案

您可以为此使用Array.reduce



let data = [  {    date: '2018-11-22',    values: {      a: 10,      b: 20,      c: 5,    },  },  {    date: '2018-11-17',    values: {      a: 5,      b: 10,      c: 15,    },  },  {    date: '2018-06-29',    values: {      a: 10,      b: 30,      c: 10,    },  },  {    date: '2017-12-20',    values: {      a: 30,      b: 40,      c: 5,    },  },];

let res = data.reduce((o, {date, values}) => {
  let k = date.slice(0, 7)

  o[k] = o[k] || {date: k, values: {a: 0, b: 0, c:0}}
  o[k].values.a += values.a
  o[k].values.b += values.b
  o[k].values.c += values.c

  return o
}, {})

console.log(Object.values(res))

关于javascript - 如何按日期属性将对象捆绑在数组中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53542961/

10-14 15:13
查看更多