javascript - 如何按日期属性捆绑数组中的对象
问题描述
我有一个包含数据的大数组。下面是一个结构示例:
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))
推荐阅读
- c# - Visual Studio 2013:DataGridView 查询以开头的单词
- html - 在表格单元格的角落添加球体形状
- java - AES_DECRYPT for login JFrame code not working
- google-play - 上传图片时 Playstore 应用程序升级问题
- python - 如何访问元组中的列表?
- reactjs - 奇怪的“TypeError:对象不是函数”错误
- reactjs - ReactJS课程文件中的额外结束脚本标记?
- scala - 如何摆脱 Akka Stream Flow 阶段中的“额外”未来?
- openssh - 如何将 ssh-agent 套接字文件放在 /tmp 以外的目录中
- ios - setViewControllers 不起作用