2017-09-27 13 views
0

私は複数の配列を比較したいと思いますし、最終的には、異なる配列のすべての一意の値を含む配列を持っています。複数の配列を比較し、javascriptで一意の値を持つ配列を返す方法は?

フィルタメソッドにアレイの入力にループ募集及び

は次のようにコードがあり、2つの配列

2との間の差を比較するためにフィルタ法を使用し、

1:私はしようとしました

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'を読み取ることができません」というエラーメッセージが返されます。ロジックに何が問題なのですか。

ご協力いただきありがとうございます。

Re:私はこの問題を重複しているとマークしていますが、私が探しているのは、入力として数多くの配列を配置してすべての違いを減らすことができるソリューションです(例:入力10000配列1つの配列をユニークな値で返します)。しかし、2つの配列を比較するだけではありません。私が見た解決策は、常に2つの配列のみです。

+2

行うには、最初あなたのextractArrayはその中のパラメータはありませんhttps://www.google.nl/search?q=javascript+compare+arrays+remove+duplicates – mplungjan

+0

...私はあなたが置くためのものと仮定し検索してください引数の変数はパラメータですか? – lancew

+0

@ Pak、それはあなたのために働いていますか? –

答えて

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] 
+0

ありがとうございます=) –

関連する問題