Saya punya objek ("associate array", misalnya - juga dikenal sebagai objek JavaScript biasa):
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
Saya ingin beralih obj
menggunakan CoffeeScript sebagai berikut:
# CS
for elem in obj
bu kode CS di atas mengkompilasi ke JS:
// JS
for (i = 0, len = obj.length; i < len; i++)
yang tidak sesuai dalam kasus ini.
Cara JavaScript akan for(var key in obj)
tetapi sekarang saya bertanya-tanya: bagaimana saya bisa melakukan ini dalam CoffeeScript?
javascript
coffeescript
jhchen
sumber
sumber
length
properti yang hanya mengacu pada indeks numerik tertinggi (ditambah 1). Apa yang Anda inginkan adalah hanya sebuah "objek":obj = {}
. Array adalah objek, tetapi tidak ada alasan untuk menggunakannya dalam contoh Anda.Jawaban:
Gunakan
for x,y of L
. Dokumentasi yang relevan .Keluaran
Anda mungkin juga ingin mempertimbangkan varian
for own k,v of ages
seperti yang disebutkan oleh Aaron Dufour dalam komentar. Ini menambahkan tanda centang untuk mengecualikan properti yang diwarisi dari prototipe, yang mungkin tidak menjadi masalah dalam contoh ini tetapi mungkin jika Anda membangun di atas hal-hal lain.sumber
of
untuk JavaScriptin
. Ini adalah titik kebingungan yang umum, tetapiin
menggunakan array sangat berguna. Saya membicarakan hal ini secara panjang lebar dalam buku CoffeeScript .arr
sebagaiarr = []
, Anda harus menggunakanarr = {}
. Dalam array Javascript (dan Coffeescript) memiliki indeks numerik. Objek berperilaku seperti array / dikte asosiatif.for own key, value of obj
lebih dekat dengan apa yang dicari OP.Anda menginisialisasi array, tetapi kemudian Anda menggunakannya seperti objek (tidak ada "array asosiatif" di js).
Gunakan sintaks untuk beralih pada objek (seperti):
sumber
[]
alih-alih{}
dalam kasus itu.Versi tangan pendek menggunakan pemahaman array, yang dapat digunakan sebagai loop satu baris.
Pemahaman array adalah:
sumber
dengan konvensi Anda, arr adalah array, tetapi "foo" adalah properti dari array ini, ini bukan nilai yang diindeks. Jika Anda ingin menyimpan data Anda nilai yang diindeks dari sebuah array, Anda harus menulis:
atau jika Anda menginginkan array asosiatif, cukup gunakan objek:
jika Anda ingin mengulangi arr1:
pengembalian:
dan untuk mengulangi arr2: "untuk nilai dalam array"
yang mengembalikan:
sumber