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.

Dave Sag
quelle

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)
Suranyami
quelle
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.

Paul Schule
quelle
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