从两个数组

时间:2015-10-27 17:11:03

标签: javascript arrays

existing ["562fae5a626ca2e032947baa"]

new array [ { _id: '562fae5a626ca2e032947baa' },
  { _id: '562fae57626ca2e032947ba9' } ]

modified [ { _id: '562fae5a626ca2e032947baa' },
  { _id: '562fae57626ca2e032947ba9' } ]

我有一个existing数组和一个new数组,我希望compare existingnew 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/

3 个答案:

答案 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;
}