Di CoffeeScript, bagaimana Anda menambahkan nilai ke Array?


98

Apa cara yang ditentukan untuk menambahkan nilai ke Array di CoffeeScript? Saya telah memeriksa buku PragProg CoffeeScript tetapi hanya membahas pembuatan, pemotongan dan penyambungan, dan pengulangan, tetapi tidak menambahkan.

Jawaban:



49

Jauh lebih baik adalah menggunakan pemahaman daftar.

Misalnya daripada ini:

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

lakukan ini sebagai gantinya:

things = (x.color for x in list)

23
Itu tidak menambahkan nilai dari daftar ke hal-hal. Itu menggantikan array hal sepenuhnya. Saya baru saja mengujinya juga.
ajsie

Baiklah, ajsie pasti, kamu benar, itu menggantikannya, bukan menambahkan. Intinya adalah, bagaimanapun, biasanya ketika Anda mendorong, Anda sering melakukan sesuatu seperti pemahaman array. Memang tidak semua kasus, tapi sering kali.
suranyami

3
@suranyami Sebaliknya, saya tidak bisa memikirkan manfaat yang baik untuk itu. Saya lebih suka melakukannya things = list, itu jauh lebih ringkas.
Michael Dorst

@suranyami Linknya sudah mati.
derekdreery

@anthropomorphic Nah, tentu saja. Itu adalah contoh yang dibuat-buat. Katakanlah itu sesuatu seperti ini: colors = (item.color for item in list)
suranyami

2

Jika Anda merangkai panggilan maka Anda ingin append mengembalikan larik daripada panjangnya. Dalam hal ini Anda dapat menggunakan .concat ([newElement])

Harus [newElement] karena concat mengharapkan sebuah array seperti yang digabung dengannya. Tidak efisien tetapi terlihat keren dalam pengaturan yang tepat.


Panggilan berantai lebih merupakan gaya yang dapat Anda lakukan, namun, saat Anda menyatakan "metode tidak efisien" - concatmengembalikan array baru yang dibangun dari elemen array A + array B. Referensi ke objek disimpan sehingga perubahan pada objek yang direferensikan baik dalam larik A, larik B, atau hasil concat akan tercermin dalam larik lainnya juga.
SidOfc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.