Jquery 如何比较两个数组并从一个数组中删除两个数组中不匹配的多个项?

Jquery 如何比较两个数组并从一个数组中删除两个数组中不匹配的多个项?,jquery,arrays,Jquery,Arrays,如何比较jquery中的两个数组,然后从第一个数组中删除两个数组中不匹配的项 我从这个开始 var listOne = [1,2,3,4,6,7]; var listTwo = [2,5,6]; 我希望结果是这样的,只有列表一被改变了 var listOne = [2,6]; var listTwo = [2,5,6]; jQuery是错误的库。有一个很好的库,名为lodash,它有一个函数,可以满足您的要求。对于中等大小的阵列,蛮力解决方案应该可以正常工作。您描述的内容基本

如何比较jquery中的两个数组,然后从第一个数组中删除两个数组中不匹配的项

我从这个开始

  var listOne = [1,2,3,4,6,7];
  var listTwo = [2,5,6];
我希望结果是这样的,只有列表一被改变了

  var listOne = [2,6];
  var listTwo = [2,5,6];

jQuery是错误的库。有一个很好的库,名为
lodash
,它有一个函数,可以满足您的要求。

对于中等大小的阵列,蛮力解决方案应该可以正常工作。您描述的内容基本上可以归结为从一个数组中删除另一个数组中不存在的元素。因此,遍历第一个数组并删除在第二个数组中找不到的任何元素:

function removeElems(src, permitted) {
    // traverse array backwards so iteration not affected when we remove current item
    for (var i = src.length - 1; i >= 0; i--) {
        // if src element not found in permitted array, remove it from src
        if (permitted.indexOf(src[i]) === -1) {
            src.splice(i, 1);
        }
    }
}

var listOne = [1,2,3,4,6,7];
var listTwo = [2,5,6];
removeElems(listOne, listTwo);
工作演示:


如果
listwo
可能很长,我可能会首先将该数组的所有元素放入一个临时对象中,因此检查数组中是否有项只是一个对象键查找,而不是线性数组搜索,但对于中小型阵列或性能不是超关键的情况,可能不需要额外的复杂性。

我建议在jQuery中使用和,如下所示:

vararray1=[1,2,3,4,6,7];
var array2=[2,5,6];
var foo=[];
var foo2=[];
var结果=[];
var i=0;
grep(array2,function(el){
if(jQuery.inArray(el,array1)=-1){
foo.push(el);
}否则{
foo2.推(el);
}
i++;
});
警报(foo2);
警报(foo);
结果=$.merge(foo2,foo)
警报(结果)