如果数组2中存在值,则Javascript从数组1中删除项

时间:2015-08-28 23:27:53

标签: javascript arrays

阵列1

[ { "id": 1, "name": "Test" }, { "id": 2, "name": "Test2" } ]

数组2

[ { "id": 1, "name": "Test3" }, { "id": 2, "name": "Test4" }, { "id": 3, "name": "Test2" } ]

如果数组2中存在项目,我需要将其从数组1中删除,因此将从数组1中删除Test2。如何在两个数组中循环并按顺序检查名称值在数组2中的存在从阵列1中删除它?

3 个答案:

答案 0 :(得分:1)

我是underscorejs的忠实粉丝......

array1 = _.reject(array1, function(e1) {
    return _.find(array2, function(e2) { return e1.name == e2.name });
});

答案 1 :(得分:0)

试试这个:

var existingIds = array2.map(function (item) { // create a list of existing ids in array 2
        return item.id;
    });

var filteredArray = array1.filter(function (item) { // check each item against existingIds, and if not found there return it
        return existingIds.indexOf(item.id) === -1;
    });

答案 2 :(得分:0)

要在不进行O(n ^ 2)搜索的情况下执行此操作,我们可以在每个阵列上循环一次,只需要额外的内存开销。

var map = new Map();
array2.forEach(function(item) {
    map.set(item.name, true);
});
var result = array1.filter(function(item) {
    return !map.has(item.name);
});

注意:我之所以使用Map只是因为它具有其他功能,例如根据任何值设置键。可以使用一个简单的对象。