[[1,2,3],[4,5,6],[7,8,9]] ==> [1 、2,3,4,5,6,7,8,9]。
ご想像のとおり、これが必要なのは、"for in" コンストラクト内の関数から配列を生成しており、結果のネストされた配列を連結する必要があるためです。
結果 = (arr の x に対して generate_array(x))
これを処理するエレガントな方法はありますか?ご指摘ありがとうございます。
[[1,2,3],[4,5,6],[7,8,9]] ==> [1 、2,3,4,5,6,7,8,9]。
ご想像のとおり、これが必要なのは、"for in" コンストラクト内の関数から配列を生成しており、結果のネストされた配列を連結する必要があるためです。
結果 = (arr の x に対して generate_array(x))
これを処理するエレガントな方法はありますか?ご指摘ありがとうございます。
JSイディオムを使用するだけです:
[].concat.apply([], a)
これは、Coffee で少し良くなります。
$ coffee -e 'a = [[1,2,3],[4,5,6],[7,8,9]]; console.dir [].concat a...'
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
コーヒーにこれはどうですか
[[1, 2, 3], [4, 5, 6], [7, 8, 9]].reduce (a, b) ->
a.concat b
またはこれは純粋なJavascriptの場合
[[1, 2, 3], [4, 5, 6], [7 , 8, 9]].reduce((a, b) => a.concat(b));
OK、1 つの方法はunderscore.jsライブラリを含めることです。これは非常に優れた軽量で強力なユーティリティ ライブラリであり、まさにこれを行う _.flatten があります。
それを除けば、フラット化のために underscore.js コードを使用し、それを変更して他のアンダースコアの依存関係を削除し、独自のスタンドアロンの「フラット化」を作成することができます。
underscore.js の "_.flatten" コードは次のとおりです。
_.flatten = function(array) {
return _.reduce(array, function(memo, value) {
if (_.isArray(value)) return memo.concat(_.flatten(value));
memo[memo.length] = value;
return memo;
}, []);
};
それはあなたのためにいくつかの素晴らしいことをしていることに注意してください. たとえば、_.reduce などのアンダースコア関数の多くは、ブラウザーがネイティブ バージョンを実装しているかどうかを確認します。もしそうなら、もちろんはるかに高速に実行されるネイティブを使用します。_.isArray 実装は同じことを行います。