如何比较多个数组并在javascript中返回具有唯一值的数组?

时间:2017-09-27 15:00:52

标签: javascript arrays

我想比较多个数组,最后得到一个包含来自不同数组的所有唯一值的数组。我试着:

1,使用filter方法比较2个数组之间的差异

2,调用for循环将数组输入过滤器方法

,代码如下

function diffArray(arr1, arr2) {
  function filterfunction (arr1, arr2) {
    return arr1.filter(function(item) {
      return arr2.indexOf(item) === -1;
    });
  }  
  return filterfunction (arr1,arr2).concat(filterfunction(arr2,arr1));
}

function extractArray() {
  var args = Array.prototype.slice.call(arguments);
  for (var i =0; i < args.length; i++) {
    diffArray(args[i],args[i+1]);
  }
}

extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

然而它不起作用并返回错误消息&#34;无法读取属性&#39; indexOf&#39; of undefined&#34; ....逻辑有什么问题,我应该改变什么来使其有效?

非常感谢您的帮助!

Re:对于所有标记为重复的问题...我正在寻找的是一个解决方案,可以让我输入尽可能多的数组,以便输入并减少所有差异(例如输入10000数组和为唯一值返回1个数组),但不仅仅是比较2个数组..我看过的解决方案总是只有2个数组。

1 个答案:

答案 0 :(得分:0)

我不使用过滤器或任何类型的东西,但它会完成工作。我首先创建一个空数组,并concat下一个数组。然后我传递它来删除重复项并返回新的“过滤”数组以供使用。

function deleteDuplicates(a){
    for(var i = a.length - 1; i >= 0; i--){
        if(a.indexOf(a[i]) !== i){
            a.splice(i, 1);
        }
    }
    return a;
}

function extractArray() {
    var args = Array.prototype.slice.call(arguments), arr = [];

    for (var i = 0; i < args.length; i++) {
        arr = deleteDuplicates(arr.concat(args[i]));
    }

    return arr;
}

var arr = extractArray([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

console.log(arr) //[3, 2, 5, 1, 7, 4, 6]