Frage

Ich versuche, eine elegante Art und Weise in Coffeescript finden ein Array von Arrays zu verbinden, so dass [[1,2,3], [4,5,6], [7,8,9]] == > [1,2,3,4,5,6,7,8,9].

Wie Sie sich vorstellen, ich brauche das, weil ich Arrays aus einer Funktion in einem „in“ Konstrukt und Notwendigkeit Erzeugen des resultierenden verschachtelten Array verketten:

result = (generate_array (x) für x in arr)

Gibt es eine elegante Art und Weise zu handhaben? Vielen Dank für alle Hinweise!

War es hilfreich?

Lösung

Sie einfach das JS Idiom verwenden:

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

, die ein wenig schöner in Kaffee wird:

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

Andere Tipps

OK, ist eine Möglichkeit, die Underscore.js Bibliothek aufzunehmen. Es ist eine sehr schöner, leichte, aber leistungsstarke Utility-Bibliothek, und es hat _.flatten was tut genau dies.

Abgesehen davon, können Sie den Code für Underscore.js Flatten nehmen könnte und ändern Sie es alle anderen Unterstreichungs Abhängigkeiten entfernen Sie Ihre eigenen Standalone zu schaffen „abzuflachen“.

Hier ist die 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;
   }, []);
 };

Beachten Sie, dass es für Sie ein paar nette Sachen tut. Zum Beispiel werden viele der Unterstreichungsfunktionen wie _.reduce zu überprüfen, um zu sehen, ob der Browser eine native Version implementiert hat, die einige haben. Wenn ja, wird es die native verwenden, die natürlich schneller läuft viel. Die _.isArray Implementierung macht das Gleiche.

Was ist das für Kaffee

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

oder dies für reine Javascript

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

sugarjs ist eine andere Eleganz Weg, es zu tun:

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

sugarjs: Flatten

Warum verwenden nicht versuchen Lodash?

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

https://lodash.com/docs#flatten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top