【问题标题】:Compare 2 arrays and create a new one based on if exist [duplicate]比较2个数组并根据是否存在创建一个新数组[重复]
【发布时间】:2015-04-22 02:42:33
【问题描述】:

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

Array1 = 3796, 3831, 3858, 3860

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

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

Array3 = 4566, 2932, 3290, 4599, 3293

【问题讨论】:

标签: javascript arrays


【解决方案1】:

我假设您正在比较普通数组。如果不是,则需要将 for 循环更改为 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 将返回具有difference of the two arraysarray

【讨论】:

  • 永远不要使用for .. in 循环遍历数组,只保留对象属性迭代。数组只能使用传统的for 循环进行迭代。
  • 是的@VisioN,我就是这么说的。如果它不是通常的数组,则使用 for...in.
【解决方案2】:

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

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]

【讨论】:

    【解决方案3】:

    你可以试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2014-04-03
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多