Wie hängt man in CoffeeScript einen Wert an ein Array an?


98

Wie kann ein Wert in CoffeeScript an ein Array angehängt werden? Ich habe das PragProg CoffeeScript-Buch überprüft, aber es behandelt nur das Erstellen, Schneiden und Spleißen sowie das Iterieren, aber nicht das Anhängen.

Antworten:



49

Weitaus besser ist es, Listenverständnisse zu verwenden.

Zum Beispiel eher als das:

things = []
for x in list
  things.push x.color

Tun Sie dies stattdessen:

things = (x.color for x in list)

23
Das hängt keine Werte von der Liste an die Dinge an. Das ersetzt das Dings-Array vollständig. Ich habe es auch gerade getestet.
Ajsie

Na klar, Ajsie, du hast Recht, es ersetzt es, nicht anhängen. Der Punkt ist jedoch, dass Sie normalerweise, wenn Sie pushen, sowieso oft so etwas wie ein Array-Verständnis tun . Zugegeben, nicht in allen Fällen, aber die meiste Zeit.
Suranyami

3
@suranyami Im Gegenteil, ich kann mir keine gute Verwendung dafür vorstellen. Ich würde es viel lieber einfach machen things = list, es ist viel prägnanter.
Michael Dorst

@suranyami Der Link ist tot.
Derekdreery

@anthropomorphic Natürlich. Es ist ein erfundenes Beispiel. Nehmen wir stattdessen an, es ist colors = (item.color for item in list)
ungefähr so

2

Wenn Sie Aufrufe verketten, soll der Anhang das Array und nicht seine Länge zurückgeben. In diesem Fall können Sie .concat ([newElement]) verwenden.

Muss [newElement] sein, da concat ein Array wie das erwartet, mit dem es verkettet ist. Nicht effizient, sieht aber in der richtigen Einstellung cool aus.


Das Verketten von Aufrufen ist jedoch eher eine stilvolle Sache, die Sie tun können, da Sie angegeben haben, dass die Methode nicht effizient ist. Sie concatgibt ein neues Array zurück, das aus den Elementen von Array A + Array B erstellt wurde. Verweise auf Objekte werden beibehalten, sodass Änderungen an einem Objekt vorgenommen werden, auf das verwiesen wird In Array A wird Array B oder das Concat-Ergebnis auch in den anderen Arrays wiedergegeben.
SidOfc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.