In CoffeeScript come si aggiunge un valore a un array?


98

Qual è il modo prescritto per aggiungere un valore a un array in CoffeeScript? Ho controllato il libro PragProg CoffeeScript, ma discute solo di creazione, affettatura e giunzione e iterazione, ma non aggiunta.

Risposte:



49

Molto meglio è usare la comprensione delle liste.

Ad esempio piuttosto che questo:

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

fai questo invece:

things = (x.color for x in list)

23
Ciò non aggiunge valori dalla lista alle cose. Questo sostituisce completamente la matrice delle cose. Anch'io l'ho appena provato.
Ajsie

Beh, certo ajsie, hai ragione, lo sostituisce, non si aggiunge. Il punto è, tuttavia, che di solito quando spingi, spesso fai comunque qualcosa di simile a una comprensione di array. Non in tutti i casi, è vero, ma la maggior parte delle volte.
suranyami

3
@suranyami Al contrario, non riesco a pensare a un buon uso per questo. Preferirei di gran lunga farlo things = list, è molto più succinto.
Michael Dorst

@suranyami Il collegamento è morto.
derekdreery

@antropomorfo Bene, ovviamente. È un esempio artificioso. Diciamo invece che è qualcosa del genere: colors = (item.color for item in list)
suranyami

2

Se stai concatenando le chiamate, vuoi che l'append restituisca l'array piuttosto che la sua lunghezza. In questo caso puoi usare .concat ([newElement])

Deve essere [newElement] poiché concat si aspetta un array come quello a cui si sta concatenando. Non efficiente ma sembra bello nell'ambiente giusto.


Il concatenamento delle chiamateèuna cosa più elegante che puoi fare tuttavia, come hai affermato "il metodo non è efficiente" - concatrestituisce un nuovo array costruito dagli elementi dell'array A + array B. I riferimenti agli oggetti vengono mantenuti in modo che le modifiche a un oggetto referenziato in entrambi gli array A, array B o il risultato di concatenazione si rifletterà anche negli altri array.
SidOfc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.