私はオブジェクト(つまり、「連想配列」-プレーンJavaScriptオブジェクトとも呼ばれます)を持っています。
obj = {}
obj["Foo"] = "Bar"
obj["bar"] = "Foo"
次のようにCoffeeScriptを使用してobj
を反復処理します。
# CS
for elem in obj
bu上記のCSコードをJSにコンパイルします。
// JS
for (i = 0, len = obj.length; i < len; i++)
この場合は適切ではありません。
JavaScriptの方法はfor(var key in obj)
になりますが、今は疑問に思っています:CoffeeScriptでこれを行うにはどうすればよいですか
for x,y of L
を使用します。 関連ドキュメント 。
ages = {}
ages["jim"] = 12
ages["john"] = 7
for k,v of ages
console.log k + " is " + v
出力
jim is 12
john is 7
Aaron Dufourがコメントで述べたように、バリアントfor own k,v of ages
を検討することもできます。これにより、プロトタイプから継承されたプロパティを除外するチェックが追加されます。これは、この例ではおそらく問題ではありませんが、他のものの上に構築する場合に発生する可能性があります。
配列を初期化していますが、オブジェクトのように使用しています(jsには「連想配列」はありません)。
オブジェクト(次のようなもの)を反復処理する構文を使用します。
for key, val of arr
console.log key + ': ' + val
1行のループとして使用できる配列内包表記を使用したショートハンドバージョン。
console.log index + ": " + Elm for index, Elm of array
配列の内包表記は次のとおりです。
「内包表記は、オプションのガード句と現在の配列インデックスの値でforループを置換(およびコンパイル)します。ループとは異なり、配列内包表記は式であり、返されて割り当てられます。」、 http:// coffeescript.org/#loops
慣例では、arrは配列ですが、「foo」はこの配列のプロパティであり、インデックス付きの値ではありません。配列のインデックス値にデータを保存する場合は、次のように記述する必要があります。
arr1 = []
arr1[0] = "Bar"
arr1[1] = "Foo"
または連想配列が必要な場合は、オブジェクトを使用するだけです:
arr2 = {}
arr2["Foo"] = "Bar" // equivalent to arr2.foo="Bar"
arr2["bar"] = "Foo" // equivalent to arr2.bar="Foo"
arr1をループする場合:
str = "values are : "
for val in arr2
str += val + " |"
console.log key + ': ' + val
戻り値:
values are : Bar | Foo |
そしてarr2をループするには: "for value in array"
for key, val of arr
console.log key + ': ' + val
を返します:
Foo : Bar
Bar : Foo