2016-04-28 30 views
0
私はこの運動を通じてつもりです

で、Array.concatを使用して動作するようにこの「ソートされた連合の機能を取得するにはどうすればよい:私は、次の必要とする<a href="https://www.freecodecamp.com" rel="nofollow">FCC</a>でJavaScript

Write a function that takes two or more arrays and returns a new array of unique values in the order of the original provided arrays.

In other words, all values present from all arrays should be included in their original order, but with no duplicates in the final array.

The unique numbers should be sorted by their original order, but the final array should not be sorted in numerical order.

は、これは私のコードです

function uniteUnique(){ 

    var elm, exists = {}, 
     outArr = [], 
     arr = [], 
     args = Array.prototype.slice.call(arguments); 

     args.forEach(function(arg) { 
     arr.concat(arg.filter(Boolean)); 
     }); 

    for(var i =0; i<arr.length; i++){ 
    elm = arr[i]; 
    if(!exists[elm]){ 
     outArr.push(elm); 
     exists[elm] = true; 
    } 
    } 
    return arr; 

} 

私の問題はこの行の中心にあります。

私は任意の助けをいただければ幸い、filter方法を通過し、その後、連結得るためにすべての引数/配列をたいと思います!

答えて

1

ブール値はユニークな項目をフィルタリングしませんが、意図していない値のBoolean(arg)を返します。

これだけまあはあなたの代わりに、次の単一のライナーの機能的なアプローチを好むかもしれユニーク

+0

ありがとう、次のように

そして、上記1のさらに多くの簡易版です!しかし、私は 'Uncaught TypeError:Undefined(...)'のプロパティ 'concat'を読み取ることができません。これは同様の解決方法で戻ってきました。 –

+0

@AntonioOrtizそれは ' uniteUnique'関数 – gurvinder372

1

ある配列項目を連結します

args.forEach(function(arg) { 
    arr.concat(arg.filter(function(val){ 
     return arr.indexOf(val) == -1; 
    })); 
    }); 

args.forEach(function(arg) { 
    arr.concat(arg.filter(Boolean)); 
    }); 

を交換してください。

var getUniques = (...a) => a.reduce((p,c)=> p.concat(c)).reduce((p,c) => {!~p.indexOf(c) && p.push(c); return p},[]); 
 
document.write("<pre>" + getUniques([1,2,3],[3,4,5],[3,4,5,6,7,8],[0,1,2,3,4,5,6,7,8,9]) + "</pre>");

getUniques関数は、外観のために、すべてのユニークの配列を返します。矢印関数には引数オブジェクトはありませんが、ES6の...restパラメータはその目的のためだけに機能します。機能的なアプローチが気に入らなくても、ロジックは、従来の関数やループを使って同じ機能を実装するのに影響することがあります。

var getUniques = (...a) => a.reduce((p,c) => {c.forEach(e => !~p.indexOf(e) && p.push(e)); return p}); 
 
document.write("<pre>" + getUniques([1,2,3],[3,4,5],[3,4,5,6,7,8],[0,1,2,3,4,5,6,7,8,9]) + "</pre>");

関連する問題

 関連する問題