数组中相同id进行分组,并把对应的值求和

本文介绍了一种使用JavaScript对数组元素进行分组并计算特定字段总和的方法。通过遍历原始数组,根据对象ID将数据分组到新的对象中,随后对每个分组内的数据进行求和操作。

一、 原数组

let list = [
    {"id": 1300, "data": {"time": "13:00", "y1": 35, "y2": 40}},
    {"id": 1330, "data": {"time": "13:05", "y1": 10, "y2": 15}},
    {"id": 1330, "data": {"time": "13:10", "y1": 15, "y2": 20}},
    {"id": 1330, "data": {"time": "13:15", "y1": 20, "y2": 25}},
    {"id": 1330, "data": {"time": "13:20", "y1": 25, "y2": 30}},
    {"id": 1330, "data": {"time": "13:25", "y1": 30, "y2": 35}},
    {"id": 1330, "data": {"time": "13:30", "y1": 35, "y2": 40}},
    {"id": 1400, "data": {"time": "13:35", "y1": 40, "y2": 45}},
    {"id": 1400, "data": {"time": "13:40", "y1": 45, "y2": 50}},
    {"id": 1400, "data": {"time": "13:45", "y1": 50, "y2": 55}},
    {"id": 1400, "data": {"time": "13:50", "y1": 55, "y2": 60}},
    {"id": 1400, "data": {"time": "13:55", "y1": 60, "y2": 65}},
    {"id": 1400, "data": {"time": "14:00", "y1": 65, "y2": 70}},
    {"id": 1430, "data": {"time": "14:05", "y1": 70, "y2": 75}},
    {"id": 1430, "data": {"time": "14:10", "y1": 75, "y2": 80}},
    {"id": 1430, "data": {"time": "14:15", "y1": 80, "y2": 85}},
    {"id": 1430, "data": {"time": "14:20", "y1": 85, "y2": 90}},
    {"id": 1430, "data": {"time": "14:25", "y1": 90, "y2": 95}},
    {"id": 1430, "data": {"time": "14:30", "y1": 95, "y2": 100}}
]

二、将数据进行分组,

let newlist={}
list .forEach(item=>{
   //判断该对象的id 是否存在,如果不存在创建一个id,并赋值一个数组
    if ( !newlist[item.id]){
     newlist[item.id]=[]
    }
    newlist[item.id].push(item.data)
})

-->生成如下
{
  '1300': [ { time: '13:00', y1: 35, y2: 40 } ],
  '1330': [
    { time: '13:05', y1: 10, y2: 15 },
    { time: '13:10', y1: 15, y2: 20 },
    { time: '13:15', y1: 20, y2: 25 },
    { time: '13:20', y1: 25, y2: 30 },
    { time: '13:25', y1: 30, y2: 35 },
    { time: '13:30', y1: 35, y2: 40 }
  ],
  '1400': [
    { time: '13:35', y1: 40, y2: 45 },
    { time: '13:40', y1: 45, y2: 50 },
    { time: '13:45', y1: 50, y2: 55 },
    { time: '13:50', y1: 55, y2: 60 },
    { time: '13:55', y1: 60, y2: 65 },
    { time: '14:00', y1: 65, y2: 70 }
  ],
  '1430': [
    { time: '14:05', y1: 70, y2: 75 },
    { time: '14:10', y1: 75, y2: 80 },
    { time: '14:15', y1: 80, y2: 85 },
    { time: '14:20', y1: 85, y2: 90 },
    { time: '14:25', y1: 90, y2: 95 },
    { time: '14:30', y1: 95, y2: 100 }
  ]
}

3.进行求和

let lastdata = []
for (let i in newlist) {
    let y1 = newlist[i].map(item => item.y1).reduce((a, b) => (a + b), 0);
    let y2 = newlist[i].map(item => item.y2).reduce((a, b) => (a + b), 0);
    lastdata.push({ item: i, y1: y1, y2: y2 })
}

--> 最后结果
[
  { item: '1300', y1: 35, y2: 40 },
  { item: '1330', y1: 135, y2: 165 },
  { item: '1400', y1: 315, y2: 345 },
  { item: '1430', y1: 495, y2: 525 }
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值