我有两个数组:
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(使用前将#替换为@)