Javascript 比较两个数组并查找第二个数组中缺少的项

Javascript 比较两个数组并查找第二个数组中缺少的项,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有两个数组,它们一开始是相同的,但是用户可以从第二个数组中删除(不能添加,只能删除)项。我想查找第一个数组中但不在第二个数组中的项 我可以想出几种方法来实现这一点,但由于这些阵列可能非常大,我很想知道是否有人能提供一种更有效的方法: $.grep( firstArray, function( n, i ){ return $.inArray(n, secondArray) == -1; }); 您可以尝试使用filter和indexOf数组方法,如下所示: var firstArray

我有两个数组,它们一开始是相同的,但是用户可以从第二个数组中删除(不能添加,只能删除)项。我想查找第一个数组中但不在第二个数组中的项

我可以想出几种方法来实现这一点,但由于这些阵列可能非常大,我很想知道是否有人能提供一种更有效的方法:

$.grep( firstArray, function( n, i ){
  return $.inArray(n, secondArray) == -1;
});

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

var firstArray=[1,2,3,4,5,6];
var secondArray=[3,4,6];
var result=firstArray.filter(item=>secondArray.indexOf(item)=-1);

控制台日志(结果)假设数组具有相同的顺序,则可以使用索引作为闭包进行筛选

var array1=[1,2,3,4,5,6,7,1,2,3],
array2=[2,4,6,7,2],
缺少=数组1.filter((i=>a=>a!==array2[i]| |!+++i)(0));
控制台日志(丢失)
函数arr_diff(a1、a2){
变量a=[],差异=[];
对于(变量i=0;i
}

使用此功能可获得两组之间的差异。
A:设置1
B:设置2
A-B:存在于A中但不存在于B中的元素

基本集合论

对数组进行
过滤
,并使用
检查数组2是否没有元素。包括

var a1=[1,2,3,4,5,6];
var a2=[1,3,5];
var缺席=a1.过滤器(e=>!a2.包括(e));
控制台日志(不存在)
因为用户可以删除项目。因此,您可以将这些已删除的项目添加到不同的数组中

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

请共享这两个阵列。如果有效,我认为您的方法相当有效。我不明白为什么人们会否决正确答案。如果你没有线索,就闭嘴学习吧。这是正确的答案。正如作者明确提到的效率:假设排序数组可能需要进行二进制搜索,这会施加额外的限制,并且比Christos的答案可读性差得多。@connexo,提到的答案依赖于唯一值,而唯一值可能不会给出。@NinaScholz伟大的答案,@NinaScholz,你能解释一下这部分吗,a=>a!==array2[i]| |++i) (0),thanks@BrandonMcConnell,我需要
i
用于
array2
。如果
i
将是
array1
的索引,则如果没有额外的偏移量,则无法进行筛选。谢谢。让我检查一下这些算法的性能。因为事实上,我知道一种方法来完成这项任务,但我希望获得更好的性能。@AshkanMobayenKhiabani是的,但根据我的说法,这是一个小而快的代码,足以完成这项任务
.includes
.indexOf
性能更好,如果您只需要检查数组是否包含元素。您的答案性能很好,但由于我只能标记一个答案,因此我选择了Nina的作为其较短的答案+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;
var deltedItems = [];
var position = 0;

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