通过js把具有相同属性的对象的值进行合并,并生成新的数组对象的方法。
在日常开发的时候,我们有时候会遇到这样的需求,
要求把具有相同属性名的对象进行合并,如下例子所示
<script>
var arrayName = [{
"id":"1",
"name":"小明",
"course":"语文"
}, {
"id":"2",
"name":"小张",
"course":"政治"
}, {
"id":"1",
"name":"小明",
"course":"历史"
}, {
"id":"3",
"name":"小王",
"course":"数学"
}, {
"id":"4",
"name":"小李",
"course":"政治"
}, {
"id":"5",
"name":"小红",
"course":"语文"
}, {
"id":"3",
"name":"小王",
"course":"化学"
},{
"id":"1",
"name":"小明",
"course":"物理"
}]
//设置两个不同的数组,
//一个数组存放所有的id,如果id重复,则进行不同的操作。
//另一个数组存放新的对象数组
// 思路
//通过对之前的数组的循环,进行判断处理,
//把不存在相同id的对象(即判断indexOf的值是否为-1)放入新的数组内。
//如果不等于-1,则代表存在相同的id值,这是,就把相同id值的对象,需要合并的值进行合并
//放入到新的数组内。
//这样就可以解决问题了。
var idArray = [];
var newAarray = [];
arrayName.forEach(function (ele, i) {
if (idArray.indexOf(arrayName[i].id) === -1) {
newAarray.push({
'id':arrayName[i].id,
'name': arrayName[i].name,
'course': [arrayName[i].course]
})
idArray.push(arrayName[i].id);
}else {
newAarray.forEach(function (dom,k) {
if (newAarray[k].id == arrayName[i].id) {
newAarray[k].course.push(arrayName[i].course) //把具有相同id的course值进行合并
}
})
}
})
console.log(newAarray)
</script>
数据处理后的效果图