JS数组对象,去重并把相同项的值合并相加

数组结构如图:

   "data": [
        {
            "workshop_name": "准特公司-冷氢化车间",
            "alarmType": "安环",
            "groupName": "四班",
            "workshop": "10005552",
            "groupId": "571254157697280261",
            "IIIAlarmCount": 0,
            "allCount": 30,
            "IIAlarmCount": 14,
            "base": "准特公司",
            "IAlarmCount": 16
        },
        {
            "workshop_name": "准特公司-冷氢化车间",
            "alarmType": "安环",
            "groupName": "一班",
            "workshop": "10005552",
            "groupId": "571253955787680005",
            "IIIAlarmCount": 0,
            "allCount": 1,
            "IIAlarmCount": 1,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-冷氢化车间",
            "alarmType": "工艺",
            "groupName": "二班",
            "workshop": "10005552",
            "groupId": "571254025643813125",
            "IIIAlarmCount": 5,
            "allCount": 5,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-冷氢化车间",
            "alarmType": "工艺",
            "groupName": "四班",
            "workshop": "10005552",
            "groupId": "571254157697280261",
            "IIIAlarmCount": 4,
            "allCount": 4,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-原料车间",
            "alarmType": "工艺",
            "groupName": "三班",
            "workshop": "10005553",
            "groupId": "571258982400977157",
            "IIIAlarmCount": 67,
            "allCount": 68,
            "IIAlarmCount": 1,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-原料车间",
            "alarmType": "工艺",
            "groupName": "一班",
            "workshop": "10005553",
            "groupId": "571258836783130885",
            "IIIAlarmCount": 28,
            "allCount": 28,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-辅助车间",
            "alarmType": "工艺",
            "groupName": "一班",
            "workshop": "10005556",
            "groupId": "571252407380666629",
            "IIIAlarmCount": 2,
            "allCount": 2,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-还原车间",
            "alarmType": "工艺",
            "groupName": "五班",
            "workshop": "10005554",
            "groupId": "571259527790520581",
            "IIIAlarmCount": 19,
            "allCount": 19,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "准特公司-还原车间",
            "alarmType": "工艺",
            "groupName": "四班",
            "workshop": "10005554",
            "groupId": "571258581501012229",
            "IIIAlarmCount": 1,
            "allCount": 1,
            "IIAlarmCount": 0,
            "base": "准特公司",
            "IAlarmCount": 0
        },
        {
            "workshop_name": "全部合计",
            "alarmType": "",
            "workshop": "",
            "IIIAlarmCount": 126,
            "allCount": 158,
            "IIAlarmCount": 16,
            "IAlarmCount": 16,
            "base": "全部"
        }
    ]

需求:接口返回的数据workshop_name相同的要去重并把数量相加(allCount、IAlarmCount、IIAlarmCount、IIIAlarmCount)这四个字段要累计求和

思路:这里可以定义俩个空数组,一个用来存储workshop_name,一个存储最终结果,代码如下:

     let idArr = []; //相同id放在同一数组中
      let resultArr = []; //最终结果数组
      // list是后台接口返回的数据(格式是数组对象)
      for (let i = 0; i < list.length; i++) {
        let index = idArr.indexOf(list[i].workshop); /* indexOf方法:查找数组里有没有对应的字段,返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。 */
        if (index > -1) {
          //有相同id存在的话,获取index索引位置
          resultArr[index].allCount += Number(list[i].allCount); //取相同workshop的allCount累加
          resultArr[index].IAlarmCount += Number(list[i].IAlarmCount); //取相同workshop的IAlarmCount累加
          resultArr[index].IIAlarmCount += Number(list[i].IIAlarmCount); //取相同workshop的IIAlarmCount累加
          resultArr[index].IIIAlarmCount += Number(list[i].IIIAlarmCount); //取相同workshop的IIIAlarmCount累加
        } else {
          idArr.push(list[i].workshop);/* 存放workshop */
          resultArr.push(list[i]);
        }
      }

最终返回结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值