javascript - 一个是数组,一个是对象,怎么进行比较去重?
问题描述
var arr=[{’id’:1,’name’:1},{’id’:2,name:2},{’id’:3,’name’:3}];var obj = {’id’:2,’name’:2};
请问这个arr 和obj怎么进行对比,发现重复id2后,去掉arr这个数组对象id:2,并生成一个新的数组?
问题解答
回答1:用数组的filter过滤一下就生成新的数组了。另外,题目里的 数组第二个 ’id:2’语法错误,引号位置不对
var res = arr.filter(function(e){ return e.id!=obj.id})
下面是我的脑洞:万一题主要的是键值对都重复才过滤呢……(有可能想多了)
考虑到可能你还想保证数组里面元素的键值对跟obj的键值对必须完全一样的话:可以考虑这样
var arr=[{’id’:1,’name’:1},{id:2,name:3},{’id’:3,’name’:3}];var arr2=[{’id’:1,’name’:1},{id:2,name:2},{’id’:3,’name’:3}];var obj = {’id’:2,’name’:2};var res = arr.filter(function(e){// var result = true; //作为过滤标识 for(var key in obj){//遍历obj的键值 if(e[key]!=obj[key]){//如果出现键值相同当值不同,就不算重复 result = true; break; } //如果上面条件不通过,那就表示键值重复 result = false; }//遍历到最后,如果键值都重复,那result肯定是false,否则必然出现result=true的情况 return result;});var res2 = arr.filter(function(e){ var result = true; for(var key in obj){ if(e[key]!=obj[key]){ result = true; break; } result = false; } return result;});回答2:
var newArr = arr.filter(item => item.id !== obj.id)回答3:
var arr=[{’id’:1,’name’:1},{’id’:2,name:2},{’id’:3,’name’:3}];var obj = {’id’:2,’name’:2};var index = -1;for (let i = 0; i < arr.length; i++) { let flag = false; for (let item in obj) {if (obj[item] !== arr[i][item]) { flag = true;} } if (!flag) {index = i; }}console.log(index);arr.splice(index,index>0);console.log(arr);回答4:
Array.prototype.filter()
var arr=[{’id’:1,’name’:1},{’id’:2,name:2},{’id’:3,’name’:3}];var obj = {’id’:2,’name’:2};var newArray = arr.filter((obj_)=>(obj_.id !== obj.id))
