比较两个数组并查找第二个数组中缺少的项[重复]

问题描述 投票:0回答:5

这个问题在这里已有答案:

我有2个数组,它们首先是相同的,但用户可能会从第二个数组中删除(无法添加但只是删除)项目。我想找到第一个数组但不在第二个数组中的项目。

我可以想到几种方法来做到这一点,但由于这些数组可能非常大,我很想知道是否有人能提供更有效的方法:

$.grep( firstArray, function( n, i ){
  return $.inArray(n, secondArray) == -1;
});
javascript jquery arrays
5个回答
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);

3
投票

您可以尝试使用filterindexOf数组方法,如下所示:

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
投票
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中的元素 基本集理论


1
投票

在数组上做一个.filter并检查数组2是否没有使用.includes的元素

var a1 = [1,2,3,4,5,6];
var a2 = [1,3,5];

var absent = a1.filter(e=>!a2.includes(e));

console.log(absent);

0
投票

用户可以删除项目。因此,您可以将这些已删除的项目添加到其他阵列中。

var deltedItems = [];
var position = 0;

function onDeleteItem(value){
   deltedItems[position] = value;
   position++;
}

在这里,您可以在deltedItems变量中找到所有已删除的项目。通过使用此逻辑,您可以消除程序的搜索成本。

© www.soinside.com 2019 - 2024. All rights reserved.