existing ["562fae5a626ca2e032947baa"]
new array [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ]
modified [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ]
我有一个existing
数组和一个new
数组,我希望compare
existing
和new array
并删除duplicates
var existing = ["562fae5a626ca2e032947baa"];
var newArr = [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ];
newArr = newArr.filter(function(val){
return existing.indexOf(val) == -1;
});
console.log(newArr);
当我尝试打印newArr时,我仍然得到两个对象?
modified [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ]
我希望修改后的数组只有。
modified [{ _id: '562fae57626ca2e032947ba9' } ]
以下是小提琴。 http://jsfiddle.net/ema6upg1/2/
答案 0 :(得分:1)
newArr.filter(function(val){
return existing.indexOf(val._id) == -1;
})
是你需要的,val是一个对象,你需要比较它的_id
答案 1 :(得分:1)
你的问题是,一个数组包含对象。
var existing = ["562fae5a626ca2e032947baa"];
var newArr = [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ];
newArr = newArr.filter(function(val){
if(typeof val == "object") {
return existing.indexOf(val._id) == -1;
}
return existing.indexOf(val) == -1;
});
console.log(newArr);
答案 2 :(得分:0)
查找对象属性比迭代数组查找id更有效。考虑:
var existing = {
"562fae5a626ca2e032947baa": true
};
var newArr = [ { _id: '562fae5a626ca2e032947baa' },
{ _id: '562fae57626ca2e032947ba9' } ];
newArr.filter(function(val) {
return existing[val._id] || false;
}