对象数组某个属性值相同的数据合并

在开发过程中,遇见后台传递的对象数组数据太散的时候,我们需要重构数据使用,借鉴两种方法来合并数据,总结如下:

//需要处理的数据
result: [
{ name: 'a', score: 80 },
{ name: 'b', score: 90 },
{ name: 'c', score: 60 },
{ name: 'a', score: 50 },
{ name: 'b', score: 66 }
]

方法一 将相同name字段属性的对象放入children的数组中,生成一个新的对象数组

// 相同数据整合
handlerDatas(arr){
    const obj = {};
    arr.forEach((item, index) => {
    const { name} = item; //解构赋值
    if (!obj[name]) {
         obj[name] = {
              name,
             children: []
          }
}
     obj[name].children.push(item);
});

合并后的数据如下

data:[
{name: 'a', children:[{name:'a', score: 80},{ name: 'a', score: 50 }]},
{name: 'b', children:[{name:'b', score: 90},{ name: 'b', score: 66 }]},
{name: 'c', children:[{name:'c', score: 60}]}
]

方法二 将相同name字段属性对象的score值相加并剔除多余数据

handlerDatas(arr){
    const data = array.map(function(item, index, arr) {
    const i = arr.find(_item => item.name === _item.name);
    if (i !== item) {
       i.score += item.score
          return undefined;
    } else {
    return i;
}
}).filter(item => item !== undefined);
       return data
}

合并后的数据如下

data:[ {name: 'a', score: 130}, {name: 'b', score: 156}, {name: 'c', score: 60} ]

 

posted on   ranyonsue  阅读(1253)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
历史上的今天:
2020-11-06 react useRef()函数
2020-11-06 setTimeout、同步、异步的理解

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示