如何查找array2中不在array1中的元素?

2023-12-26

我有两个数组:

var a1 = [ { ID: 2, N:0 }, { ID: 1, N:0 } ];
var a2 = [ { ID: 1, N:0 }, { ID: 2, N:0 }, { ID: 3, N:0 } ];

我需要获取所有打开的元素a2但不在a1。这里的一个元素与另一个元素的区别仅在于属性ID,其他属性应该被忽略。而且我无法保证数组中元素的顺序。这意味着这个例子的结果应该是:

var result = [ { ID: 3, N:0 } ]; // result for the example above

我怎样才能有效地做到这一点? (我将比较长度为 500 到 5,000 的数组)


为了有效地做到这一点,您需要为 a1 中已有的项目构建一个索引,以便您可以循环遍历 a2 并将每个项目与索引进行比较,看看它是否已经被看到。可以使用 javascript 对象作为索引。循环遍历a1并将其所有ID放入索引中。然后循环遍历a2并收集ID未出现在索引中的所有项目。

function findUniques(testItems, baseItems) {
    var index = {}, i;
    var result = [];

    // put baseItems id values into the index
    for (i = 0; i < baseItems.length; i++) {
        index[baseItems[i].ID] = true;
    }

    // now go through the testItems and collect the items in it 
    // that are not in the index
    for (i = 0; i < testItems.length; i++) {
        if (!(testItems[i].ID in index)) {
            result.push(testItems[i]);
        }
    }
    return(result);
}

var a1 = [ { ID: 2, N:0 }, { ID: 1, N:0 } ];
var a2 = [ { ID: 1, N:0 }, { ID: 2, N:0 }, { ID: 3, N:0 } ];

var result = findUniques(a2, a1);
// [{"ID":3,"N":0}]

工作演示:http://jsfiddle.net/jfriend00/uDEtg/ http://jsfiddle.net/jfriend00/uDEtg/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查找array2中不在array1中的元素? 的相关文章

随机推荐