Javascript 比较两个阵列,并根据是否存在创建一个新阵列

Javascript 比较两个阵列,并根据是否存在创建一个新阵列,javascript,arrays,Javascript,Arrays,如何比较这两个数组,并根据Array1中是否有任何数字存在于Array2中创建一个新数组(已过滤)。这两个数组都是动态的,可以具有不同的长度 Array1 = 3796, 3831, 3858, 3860 Array2 = 3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293 etc etc.. 在这种情况下,我希望我的输出为: Array3 = 4566, 2932, 3290, 4599, 3293 我假设您正在比较普通数组。如果否,则需要将fo

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

Array1 = 3796, 3831, 3858, 3860

Array2 = 3796, 4566, 2932, 3831, 3290, 3858, 4599, 3293 etc etc..
在这种情况下,我希望我的输出为:

Array3 = 4566, 2932, 3290, 4599, 3293

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

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;
}
函数arr_diff(a1、a2)
{
变量a=[],差异=[];
对于(var i=0;i您可以尝试以下方法:

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);
       }
}
_数组中的函数(针、草垛){ 对于(var i=0;i

我还没有测试它,但我想它应该可以工作。

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

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]
功能差异(a、b){
var c=[].slice.call(a.length>b.length?a:b);//克隆最长的数组
返回c.filter(函数(c){返回a.indexOf(c)<0});//过滤掉相交
}
变量a=[3796383138583860],
b=[3796456293238313290385845993293];
console.log(diff(a,b));//[45662932329045993293]

你能告诉我们这两个数组之间的相关性吗,或者我们应该试着找出它吗?为什么不直接使用Array.prototype.filter?永远不要使用
for.迭代数组。在
循环中,只保留它用于对象属性迭代。数组应该只使用传统的
for
循环进行迭代。是的@VisioN,这就是我说的。我如果它不是一个普通数组,则用于…in。