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.