Jak w CoffeeScript dodać wartość do tablicy?


98

Jaki jest zalecany sposób dołączania wartości do tablicy w CoffeeScript? Sprawdziłem książkę PragProg CoffeeScript, ale omawia ona tylko tworzenie, cięcie i splicing oraz iterację, ale nie dołączanie.

Odpowiedzi:



49

O wiele lepiej jest używać list składanych.

Na przykład zamiast tego:

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

zrób to zamiast tego:

things = (x.color for x in list)

23
To nie dodaje wartości z listy do rzeczy. To całkowicie zastępuje tablicę rzeczy. Właśnie to przetestowałem.
ajsie

Cóż, jasne ajsie, masz rację, zastępuje go, a nie dodaje. Chodzi jednak o to, że zwykle kiedy pchasz, i tak często robisz coś podobnego do zrozumienia tablicowego. Trzeba przyznać, że nie we wszystkich przypadkach, ale często.
suranyami

3
@suranyami Wręcz przeciwnie, nie przychodzi mi do głowy żaden dobry użytek z tego. Wolałbym po prostu to zrobić things = list, jest o wiele bardziej zwięzły.
Michael Dorst

@suranyami Link nie działa.
derekdreery

@anthropomorphic Cóż, oczywiście. To wymyślony przykład. Powiedzmy, że to coś takiego: colors = (item.color for item in list)
suranyami

2

Jeśli łączysz wywołania w łańcuch, chcesz, aby append zwrócił tablicę, a nie jej długość. W tym przypadku możesz użyć .concat ([newElement])

Musi być [newElement], ponieważ concat oczekuje tablicy, takiej jak ta, do której dokonuje konkatenacji. Nie wydajne, ale wygląda fajnie w odpowiednim ustawieniu.


Łączenie wywołań jest bardziej stylową rzeczą, którą możesz zrobić, ponieważ stwierdziłeś, że metoda nie jest wydajna - concatzwraca nową tablicę zbudowaną z elementów tablicy A + tablica B. Odniesienia do obiektów są zachowywane, więc zmiany w obiekcie, do którego się odwołuje w każdej tablicy A, tablicy B lub wyniku konkatowania zostaną również odzwierciedlone w innych tablicach.
SidOfc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.