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

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

//需要处理的数据
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 2023-11-06 15:52  ranyonsue  阅读(757)  评论(0编辑  收藏  举报

导航