Question

Je suis en train de trouver une façon élégante dans coffeescript de fusionner un tableau de tableaux, de sorte que [[1,2,3], [4,5,6], [7,8,9]] == > [1,2,3,4,5,6,7,8,9].

Comme vous pouvez l'imaginer, j'ai besoin parce que je suis générer des tableaux d'une fonction dans un « dans » construction et besoin de concaténer le tableau imbriqué résultant:

  

= résultat (generate_array (x) pour x dans arr)

Y at-il une façon élégante de gérer cette situation? Merci pour tous les pointeurs!

Était-ce utile?

La solution

Il suffit d'utiliser l'idiome JS:

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

qui devient un peu plus agréable dans le café:

$ 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 ]

Autres conseils

OK, une façon est d'inclure la bibliothèque underscore.js . Il est une très belle bibliothèque utilitaire léger mais puissant, et il a _.flatten qui fait exactement cela.

Sauf que, vous pouvez prendre le code underscore.js pour Aplatir et le modifier pour éliminer toutes les autres dépendances de soulignement pour créer votre propre autonome « ??aplatir ».

Voici les underscore.js "_.flatten" code:

 _.flatten = function(array) {
   return _.reduce(array, function(memo, value) {
     if (_.isArray(value)) return memo.concat(_.flatten(value));
     memo[memo.length] = value;
     return memo;
   }, []);
 };

Notez qu'il est en train de faire des trucs bien pour vous. Par exemple, la plupart des fonctions de underscore comme _.reduce vérifiera si le navigateur a mis en place une version native, dont certains ont. Dans ce cas, il utilisera le natif qui bien sûr va beaucoup plus vite. La mise en œuvre _.isArray fait la même chose.

Qu'en est-ce pour le café

[[1, 2, 3], [4, 5, 6], [7, 8, 9]].reduce (a, b) ->
  a.concat b

ou pour ce pur Javascript

[[1, 2, 3], [4, 5, 6], [7 , 8, 9]].reduce((a, b) => a.concat(b));

sugarjs est une autre façon de l'élégance de le faire:

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

sugarjs: Aplatir

Pourquoi ne pas essayer d'utiliser Lodash?

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

https://lodash.com/docs#flatten

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top