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

问题描述:

如何比较jQuery中的两个数组,然后从第一个数组中删除两个数组中不匹配的项?如何比较两个数组,并从两个数组中不匹配的数组中删除多个项目?

我开始与这个

var listOne = [1,2,3,4,6,7]; 
    var listTwo = [2,5,6]; 

我想要的结果是这样才那么listOne改变。

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

对于中等大小的阵列,蛮力解决方案应该可以正常工作。你所描述的看起来好像基本上是从一个数组中删除其他数组中不存在的元素。因此,穿过第一阵列,并删除未在第二数组中的所有元素:

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); 

工作演示:http://jsfiddle.net/jfriend00/1n1fbpgm/


如果listTwo可能会很长,我可能把所有首先将该数组的元素转换为临时对象,以便检查项目是否位于数组中,而不仅仅是对象键查找而不是线性数组搜索,但是对于中小型数组或者性能不是非常重要的情况复杂性可能不合理。

jQuery只是这样做的错误库。有一个很好的库叫做lodash,它有一个功能difference,可以完成你所要求的功能。

我会建议使用.grep.inArray jQuery中,像:

var array1 = [1, 2, 3, 4, 6, 7]; 
 
var array2 = [2, 5, 6]; 
 

 
var foo = []; 
 
var foo2 = []; 
 
var result = []; 
 
var i = 0; 
 
jQuery.grep(array2, function(el) { 
 
    if (jQuery.inArray(el, array1) == -1) { 
 
    foo.push(el); 
 
    } else { 
 
    foo2.push(el); 
 
    } 
 

 
    i++; 
 
}); 
 
alert(foo2); 
 
alert(foo); 
 
result = $.merge(foo2, foo) 
 
alert(result);

http://jsfiddle.net/csdtesting/u9xES/644/