繁体   English   中英

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

[英]How to compare multiple arrays and return an array with unique values in javascript?

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

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

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'” ....逻辑有什么问题,我应该更改使其起作用吗?

非常感谢您的提前帮助!

回复:对于所有将此问题标记为重复的问题……我正在寻找一种解决方案,可以让我根据需要输入尽可能多的数组,并减少所有差异(例如,输入10000个数组并返回1个数组) (用于唯一值),而不仅是比较2个数组..我看到的解决方案始终仅使用2个数组。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM