javascript - 一個是數(shù)組,一個是對象,怎么進(jìn)行比較去重?
問題描述
var arr=[{’id’:1,’name’:1},{’id’:2,name:2},{’id’:3,’name’:3}];var obj = {’id’:2,’name’:2};
請問這個arr 和obj怎么進(jìn)行對比,發(fā)現(xiàn)重復(fù)id2后,去掉arr這個數(shù)組對象id:2,并生成一個新的數(shù)組?
問題解答
回答1:用數(shù)組的filter過濾一下就生成新的數(shù)組了。另外,題目里的 數(shù)組第二個 ’id:2’語法錯誤,引號位置不對
var res = arr.filter(function(e){ return e.id!=obj.id})
下面是我的腦洞:萬一題主要的是鍵值對都重復(fù)才過濾呢……(有可能想多了)
考慮到可能你還想保證數(shù)組里面元素的鍵值對跟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; //作為過濾標(biāo)識 for(var key in obj){//遍歷obj的鍵值 if(e[key]!=obj[key]){//如果出現(xiàn)鍵值相同當(dāng)值不同,就不算重復(fù) result = true; break; } //如果上面條件不通過,那就表示鍵值重復(fù) result = false; }//遍歷到最后,如果鍵值都重復(fù),那result肯定是false,否則必然出現(xiàn)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))
