今天碰到一个去重的问题,大概就是,要将对象的描述都整合在一起。
类似于描述人,可以有姓名,身份证号,性别,身高,兴趣爱好等。
多种描述都是针对同一个人,即姓名和身份证号唯一,那就应该整合在同一个对象里。
- JS中提供了
Object.assign()
方法,用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 - 数组的
splice()
方法用于在原数组中进行添加、替换、删除元素 - 数组的
push()
方法用于栈形式的数组进行追加操作
我的思路是这样的:
- 建一个新的数组,将旧的数组进行遍历,一个一个放进去;
- 放进去之前,进行检查,这个检查是通过遍历新的数组,如果正打算放进去的这个json对象里的name和idNumber有一个是存在的,那就将这个json对象和这里面的json对象进行assign赋值,得到综合体;
- 先把原先不完整的通过splice()方法去掉;
- 再把这个完整的放进新数组
var oldArr = [{
"name": "老皮",
"idNumber": 123456,
"age": 22
},
{
"idNumber": 123456,
"photoNumber": 666
},
{
"name": "老皮",
"identity": "student"
},
{
"name": "老灰",
"idNumber": "6688",
"photoNumber": 333
}
]
var newArr = [];
for(var i=0;i<oldArr.length;i++){
for(var j=0;j<newArr.length;j++){
if(newArr[j].name === oldArr[i].name
|| newArr[j].idNumber === oldArr[i].idNumber
){
Object.assign(oldArr[i],newArr[j]);
newArr.splice(j,1) ;
}
}
newArr.push(oldArr[i]);
}
console.log(newArr);
调试结果如下: