Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按日期属性绑定数组中的对象_Javascript_Arrays - Fatal编程技术网

Javascript 如何按日期属性绑定数组中的对象

Javascript 如何按日期属性绑定数组中的对象,javascript,arrays,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',

我有一个大的数据阵列。以下是该结构的一个示例:

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,
    },
  },
];
我花了几个小时试图编写一个工作函数,但我无法处理它。 有什么办法可以像这样捆绑一个数组吗


谢谢你的帮助

您可以使用
数组。为此减少

let data=[{date:'2018-11-22',值:{a:10,b:20,c:5,},},{date:'2018-11-17',值:{a:5,b:10,c:15,},},{date:'2018-06-29',值:{a:10,b:30,c:10,},},{date 2017-12-20',值:{a:30,b:40,c:5,},  },];
让res=data.reduce((o,{date,values})=>{
设k=date.slice(0,7)
o[k]=o[k]|{date:k,值:{a:0,b:0,c:0}
o[k].values.a+=values.a
o[k].values.b+=values.b
o[k].values.c+=values.c
返回o
}, {})

console.log(Object.values(res))
您可以为此使用
数组。reduce

let data=[{date:'2018-11-22',值:{a:10,b:20,c:5,},},{date:'2018-11-17',值:{a:5,b:10,c:15,},},{date:'2018-06-29',值:{a:10,b:30,c:10,},},{date 2017-12-20',值:{a:30,b:40,c:5,},  },];
让res=data.reduce((o,{date,values})=>{
设k=date.slice(0,7)
o[k]=o[k]|{date:k,值:{a:0,b:0,c:0}
o[k].values.a+=values.a
o[k].values.b+=values.b
o[k].values.c+=values.c
返回o
}, {})

console.log(Object.values(res))
您还可以让它更简洁,而不是像这样处理单个
道具:

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,
    },
  },
];
let data=[{date:'2018-11-22',值:{a:10,b:20,c:5,},},{date:'2018-11-17',值:{a:5,b:10,c:15,},},{date:'2018-06-29',值:{a:10,b:30,c:10,},},{date 2017-12-20',值:{a:30,b:40,c:5,},},];
const result=data.reduce((r,{date,values})=>{
日期=日期。子字符串(0,7)
r[日期]=r[日期]
?(Object.keys(values).forEach(k=>r[date]。values[k]+=values[k]),r[date])
:{日期,值}
返回r
}, {})

console.log(Object.values(result))
您还可以让它更简洁,而不是像这样处理单个
道具:

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,
    },
  },
];
let data=[{date:'2018-11-22',值:{a:10,b:20,c:5,},},{date:'2018-11-17',值:{a:5,b:10,c:15,},},{date:'2018-06-29',值:{a:10,b:30,c:10,},},{date 2017-12-20',值:{a:30,b:40,c:5,},},];
const result=data.reduce((r,{date,values})=>{
日期=日期。子字符串(0,7)
r[日期]=r[日期]
?(Object.keys(values).forEach(k=>r[date]。values[k]+=values[k]),r[date])
:{日期,值}
返回r
}, {})

console.log(Object.values(result))
是否有办法将月份绑定到数组中而不是对象中?@iamrobin。是的,可能。您能告诉我预期的输出吗?有没有办法将月份绑定到数组中而不是对象中?@iamrobin。是的,可能。你能告诉我预期产量吗?