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

时间:2014-09-29 20:24:37

标签: jquery arrays

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

我从这个

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

我希望结果像这样只有listOne被更改。

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

3 个答案:

答案 0 :(得分:2)

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

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可能很长,我可能会首先将该数组的所有元素放入一个临时对象中,以便检查数组中的项是否只是对象键查找而不是线性数组搜索,但对于小型/中型阵列或性能不是超级批评的情况,可能无法保证额外的复杂性。

答案 1 :(得分:2)

我建议在jQuery中使用.grep.inArray,就像那样:



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/

答案 2 :(得分:0)

jQuery只是错误的库。有一个名为lodash的漂亮的库,其函数difference可以满足您的要求。