我有2个数组,它们最初是相同的,但用户可能会从第二个数组中删除(无法添加但只是删除)项目。我想找到第一个数组但不在第二个数组中的项目。
我可以想到几种方法,但由于这些数组可能非常大,我很想知道是否有人能提供更有效的方式:
$.grep( firstArray, function( n, i ){
return $.inArray(n, secondArray) == -1;
});
答案 0 :(得分:4)
您可以尝试使用filter
和indexOf
数组方法,如下所示:
var firstArray = [1,2,3,4,5,6];
var secondArray = [3,4,6];
var result = firstArray.filter(item=>secondArray.indexOf(item)==-1);
console.log(result);
答案 1 :(得分:1)
假设数组具有相同的顺序,那么您可以使用索引作为闭包过滤。
var array1 = [1, 2, 3, 4, 5, 6, 7, 1, 2, 3],
array2 = [2, 4, 6, 7, 2],
missing = array1.filter((i => a => a !== array2[i] || !++i)(0));
console.log(missing);
答案 2 :(得分:1)
function arr_diff (a1, a2) {
var a = [], diff = [];
for (var i = 0; i < a1.length; i++) {
a[a1[i]] = true;
}
for (var i = 0; i < a2.length; i++) {
if (a[a2[i]]) {
delete a[a2[i]];
} else {
a[a2[i]] = true;
}
}
for (var k in a) {
diff.push(k);
}
return diff;
}
使用此功能可以获得两组之间的差异
答:设置1
B:设置2
A-B:A中存在但不存在于B中的元素
基本集理论