对象数组某个属性值相同的数据合并
在开发过程中,遇见后台传递的对象数组数据太散的时候,我们需要重构数据使用,借鉴两种方法来合并数据,总结如下:
//需要处理的数据
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 阅读(1155) 评论(0) 编辑 收藏 举报