javascript - 如何按日期属性将对象捆绑在数组中

标签 javascript arrays

我有一个包含数据的大数组。这是结构的示例:

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,
    },
  },
];

我需要按月和年在新数组中构造此数据。每个月的值(value)属性应该被总结。

所以这个例子的新数组应该是这样的:

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/

相关文章:

javascript - 将数据从 HTML5 存储存储到应用程序数据库面临困难

javascript - 在固定元素上滚动列表

javascript - 使用 Azure 平台访问数组位置在 JavaScript 中返回未定义

java - 如何在java中对文本文件进行冒泡排序

C++ 数组声明

javascript - 将 aac 单音频添加到 MPEG DASH mpd 文件

javascript - 选择带空格的父级高度 :nowrap

arrays - Ruby:从文件中读取整数并将它们放入数组中

arrays - 在 Fortran 中将指针分配给可分配的派生类型组件

php - 从嵌套数组中提取数据