Trong CoffeeScript, làm cách nào để bạn nối một giá trị vào một Mảng?


98

Cách quy định để nối giá trị vào Mảng trong CoffeeScript là gì? Tôi đã kiểm tra sách PragProg CoffeeScript nhưng nó chỉ thảo luận về việc tạo, cắt và nối, và lặp lại chứ không phải thêm vào.

Câu trả lời:


192

Tốt cũ pushvẫn hoạt động.

x = []
x.push 'a'

9
Tác giả của cuốn sách PragProg đây. +1 câu trả lời của Thilo. Tôi không muốn đề cập đến các Arrayphương thức nguyên mẫu trong cuốn sách, vì đã có rất nhiều tài liệu JavaScript tốt trên mạng. Ví dụ: xem developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Trevor Burnham

Còn nếu chúng ta có một đối tượng chứ không phải một ký tự?
Gaʀʀʏ

Tôi đã mong đợi x << 'a'để làm việc.
Chloe

49

Tốt hơn nhiều là sử dụng khả năng hiểu danh sách.

Ví dụ thay vì thế này:

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

làm điều này thay thế:

things = (x.color for x in list)

23
Điều đó không nối các giá trị từ danh sách vào các thứ. Điều đó thay thế hoàn toàn mảng thứ. Tôi cũng vừa thử nghiệm nó.
ajsie

Vâng, chắc chắn ajsie, bạn chính xác, nó thay thế nó, không phải thêm vào. Tuy nhiên, vấn đề là thông thường khi bạn đang thúc đẩy, bạn thường làm một cái gì đó khá giống như hiểu mảng. Không phải trong tất cả các trường hợp, thừa nhận, nhưng rất nhiều thời gian.
suranyami

3
@suranyami Ngược lại, tôi không thể nghĩ ra cách nào hữu ích cho việc đó. Tôi chỉ muốn làm things = list, nó ngắn gọn hơn nhiều.
Michael Dorst

@suranyami Liên kết đã chết.
derekdreery,

@anthropomorphic Vâng, tất nhiên. Đó là một ví dụ giả định. Hãy nói rằng đó là một cái gì đó như thế này thay vì: colors = (item.color for item in list)
suranyami

2

Nếu bạn đang chuỗi các cuộc gọi thì bạn muốn phần nối thêm trả về mảng hơn là độ dài của nó. Trong trường hợp này, bạn có thể sử dụng .concat ([newElement])

Phải là [newElement] vì concat đang mong đợi một mảng giống như mảng mà nó nối với. Không hiệu quả nhưng trông tuyệt vời trong cài đặt phù hợp.


Tuy nhiên, chuỗi cuộc gọi là một điều phong cách hơn bạn có thể làm, như bạn đã nói "phương thức không hiệu quả" - concattrả về một mảng mới được xây dựng từ các phần tử của mảng A + mảng B. Các tham chiếu đến các đối tượng được giữ lại để các thay đổi đối với một đối tượng được tham chiếu trong mảng A, mảng B hoặc kết quả kết hợp cũng sẽ được phản ánh trong các mảng khác.
SidOfc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.