Як у CoffeeScript як додавати значення до масиву?


98

Який встановлений спосіб додавання значення до масиву в CoffeeScript? Я перевірив книгу PragProg CoffeeScript, але в ній обговорюється лише створення, нарізання та сплайсинг та ітерація, але не додається.

Відповіді:


192

Добрий старий pushвсе ще працює.

x = []
x.push 'a'

9
Автор книги PragProg тут. +1 до відповіді Тіло. Я не хотів висвітлювати Arrayпрототипи методів у книзі, оскільки там вже багато хорошої документації JavaScript. Дивіться, наприклад, developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Тревор Бернхем,

А як бути, якщо у нас є предмет, а не персонаж?
Gaʀʀʏ

Я очікував x << 'a'працювати.
Хлоя

49

Набагато краще - використовувати розуміння списку.

Наприклад, а не це:

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

зробіть це замість цього:

things = (x.color for x in list)

23
Це не додає значення до списку до речей. Це повністю замінює масив речей. Я теж тестував це теж.
ajsie

Ну, впевнена, Аджи, ти маєш рацію, вона замінює її, а не додає. Сенс полягає в тому, що зазвичай, коли ти штовхаєшся, ти все одно робиш щось на зразок розуміння масиву. Не у всіх випадках, правда, але багато часу.
suranyami

3
@suranyami Навпаки, я не можу придумати корисного для цього. Я б набагато скоріше просто робив things = list, це набагато складніше.
Майкл Дорст

@suranyami Посилання мертва.
derekdreery

@anthropomorphic Ну, звичайно. Це надуманий приклад. Скажімо, це щось на зразок цього: colors = (item.color for item in list)
suranyami

2

Якщо ви пов’язуєте дзвінки, тоді ви хочете, щоб додаток повертало масив, а не його довжину. У цьому випадку ви можете використовувати .concat ([newElement])

Повинен бути [newElement], оскільки concat очікує масив, як той, до якого він приєднується. Не ефективно, але виглядає круто в правильній обстановці.


Зв'язування викликів - це більш стильна річ, яку ви можете зробити, проте, як ви заявили, що "метод не є ефективним" - concatповертає новий масив, побудований з елементів масиву A + масив B. Посилання на об'єкти зберігаються, так що зміни на об'єкт посилаються в будь-якому масиві A масив B або результат concat буде відображено і в інших масивах.
SidOfc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.