【问题标题】:How to compare multiple arrays and return an array with unique values in javascript?如何比较多个数组并在javascript中返回具有唯一值的数组?
【发布时间】:2018-03-09 03:20:40
【问题描述】:

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

1、使用filter方法比较2个数组的差异

2、调用for循环将数组输入到filter方法中

代码如下

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

但是它不起作用并返回错误消息“无法读取属性 'indexOf' of underfined”...。逻辑有什么问题,我应该更改什么才能使其正常工作?

非常感谢您提前提供的帮助!

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

【问题讨论】:

  • 您的 extractArray 中没有参数...我假设您打算将 arguments 变量作为参数?
  • @Pak,它对你有用吗?
  • @Alexandru-Ionut Mihai 我记得我以前看过你的回答,但我不知道它为什么消失了.....不过还是谢谢你的帮助!

标签: javascript arrays


【解决方案1】:

我不使用过滤器或任何类似的东西,但它会完成工作。我首先创建一个空数组和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]

【讨论】:

  • 感谢您的帮助 =)
猜你喜欢
  • 2015-07-19
  • 2017-04-08
  • 1970-01-01
  • 2021-10-18
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 2014-12-08
相关资源
最近更新 更多