質問

1,2,3]、[4,5,6]、[7,8,9]] ==> [1のアレイの配列をマージするために、coffeescriptでエレガントな方法を見つけようとしています。 、2,3,4,5,6,7,8,9]。

ご想像のとおり、「for in」コンストラクトの関数からアレイを生成し、結果のネストされた配列を連結する必要があるため、これが必要です。

result =(generate_array(x)for x in arr)

これを処理するエレガントな方法はありますか?ポインターをありがとう!

役に立ちましたか?

解決

JS Idiomを使用するだけです。

 [].concat.apply([], a)

これはコーヒーで少し良くなります:

$ 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つの方法は、を含めることです 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の実装は同じことを行います。

コーヒーはどうですか

[[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));

Sugarjsはそれを行うためのもう1つの優雅な方法です:

[[1, 2, 3]].flatten() //=> [1, 2, 3]

SugarJS:フラットン

Lodashを使用してみませんか?

_.flatten([1,2,3], [4,5,6]) => [1,2,3,4,5,6]

https://lodash.com/docs#flatten

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top