过滤器阵列不在另一个阵列中

时间:2015-11-07 00:51:51

标签: javascript knockout.js

需要根据另一个数组过滤一个数组。淘汰中是否有一个util函数?否则我需要使用javascript

第一:

var obj1 = [{
    "visible": "true",
    "id": 1
}, {
    "visible": "true",
    "id": 2
}, {
    "visible": "true",
    "id": 3
}, {
    "Name": "Test3",
    "id": 4
}];

第二:

var obj2 = [ 2,3]

现在我需要根据obj2过滤obj1并从obj1中返回上面数据中不在obj2 omittng 2,3中的项目(对象1的比较 Id

输出:

[{
    "visible": "true",
    "id": 1
}, {
    "Name": "Test3",
    "id": 4
}];

2 个答案:

答案 0 :(得分:27)

您可以使用obj1直接浏览filter并使用indexOf上的obj2来查看它是否存在。如果值不在数组中,则indexOf会返回-1,而当回调返回filter时,true会包含该项。

var arr = obj1.filter(function(item){
  return obj2.indexOf(item.id) === -1;
});

答案 1 :(得分:0)

要创建输出数组,请创建一个函数,该函数将迭代obj1并根据obj2中是否存在迭代中每个obj的id来填充新数组。

var obj1 = [{
    "visible": "true",
    "id": 1
}, {
    "visible": "true",
    "id": 2
}, {
    "visible": "true",
    "id": 3
}, {
    "Name": "Test3",
    "id": 4
}];

var obj2 = [2,3]

var select = function(arr) {
  var newArr = [];
  obj1.forEach(function(obj) {
    if obj2.indexOf(obj.id) !== -1 {
      newArr.push(obj)
    };
  };
  return newArr;
};