比较2个数组并根据if存在创建一个新数组

时间:2015-02-20 12:09:48

标签: javascript arrays

如何比较这两个数组并根据Array2中是否存在Array1中的任何数字创建一个新数组(已过滤)。两个阵列都是动态的,可以有不同的长度。

Array1 = 3796, 3831, 3858, 3860

Array2 = 3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293 etc etc..

在这种情况下,我希望我的输出为:

Array3 = 4566, 2932, 3290, 4599, 3293

3 个答案:

答案 0 :(得分:0)

我假设您正在比较普通数组。如果不是,则需要将for循环更改为.. in循环。

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

function将返回array difference of the two arrays

答案 1 :(得分:0)

你可以试试这个:

function in_array(needle, haystack){
   for (var i = 0; i < haystack.length; i++){
      if (needle == haystack[i]) return true;
   }
   return false;
}    

for (var i = 0; i < array1.length; i++){
       if (!in_array(array1[i], array2){
          var index = array1.indexOf(array1[i]);
          array1.splice(index, 1);
       }
}

我还没有测试过,但我想它应该有用。

答案 2 :(得分:0)

这可能是最短的解决方案:

function diff(a, b) {
    var c = [].slice.call(a.length > b.length ? a : b);  // clone the longest array
    return c.filter(function(c) { return a.indexOf(c) < 0 });  // filter out intersects
}

var a = [3796, 3831, 3858, 3860],
    b = [3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293];

console.log( diff(a, b) );  // [4566, 2932, 3290, 4599, 3293]