簡體   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