2016-05-18 17 views
4

lodashを使用して配列内で配列を結合する方法はありますか?lodashを使用した配列内部の配列

例えば:

入力:

var x = [ [1,2,3,4], [5,6,7], [], [8,9], [] ]; 

予想される出力:

x = [1,2,3,4,5,6,7,8,9]; 

現在、私のコードは次のようん:

return promise.map(someObjects, function (object)) { 
    return anArrayOfElements(); 
}).then(function (arrayOfArrayElements) { 
    // I tried to use union but it can apply only on two arrays 
    _.union(arrayOfArrayElements); 
}); 
+0

'_.flatten'を試しましたか? – Bergi

+0

今すぐ働きました_.union(_。flatten(x)) – user2936008

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenceの「配列の配列を平坦化する」の例をご覧ください/グローバル_オブ​​ジェクト/配列/縮小。それはあなたが望むものを正確に行います:D –

答えて

2

勤務答えを演出しますが、私は他のポストをチェックすると、彼らは単にloadashを使用します。私はポストで提供されているすべての回答に使用するのに最適な構文が何であるかを知りません。今その回答については、以下の方法に

_.uniq(_.flatten(x)); // x indicates arrayOfArrayObjects 
// or, using chain 
_(x).flatten().uniq().value(); 

みんなありがとうを使用するための 。 :)

5

使用applyメソッドの引数として配列の値を渡す:

var union = _.union.apply(null, arrayOfArrayElements); 

[https://jsfiddle.net/qe5n89dh/]

+0

なぜ私たちはパラメータとしてnullを渡していますか? – user2936008

+1

'this'を渡す必要はないので(' 'apply''の定義を参照してください)。 –

3

私は考えることができる最も簡単な解決策はただconcatを使用することです:

Array.prototype.concat.apply([], [ [1,2,3,4], [5,6,7],[], [8,9], []]); 

は、他のすべての答えが働いていた、私のために...

[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 
+0

'Concat'は' lodash union'ではなく重複した項目を削除しません。 –

+0

ああ、私はそれが愚か者を削除する必要があります逃した。 –

関連する問題