これを使用できるというのはよくある誤解です。
for (var currency in country) {
result += { ... something done with both currency and country[currency] ... };
}
ここでの落とし穴は、ハッシュがJSで技術的に順序付けされていないため、これらのオプションの同じ順序を保証できないことです。
一般的な代替手段は、代わりにオブジェクトの配列を使用することです。
var countriesData = [
{
country: 'Sweden',
currency: 'SEK'
},
{
country: 'United States',
currency: 'USD'
}
];
for (var i = 0, l = countriesData.length; i < l; i++) {
result += { something of countriesData[i].currency and countriesData[i].country };
}
補足として、これを考慮してください...
var country = new Array();
country["SEK"] = 'Sweden';
country["USD"] = 'United states';
console.log(country.length); // wait, what?
...そして0がログに記録されますが、2ではありません-おそらく予想どおりです。繰り返しになりますが、JSには「PHPのような連想配列」のようなものはありません。オブジェクトと配列があります(技術的にはオブジェクトでもあり、typeof country
「オブジェクト」文字列を提供します)。
つまり、これがここで発生することです。オブジェクトを作成すると、特に)のすべてのプロパティ(など)Array
を継承します。ここで、この配列を2つのプロパティ(「SEK」と「USD」)で拡張します。しかし、それはこれらの文字列をまたはいくつかの同様のメソッドで配列にプッシュすることと同じではありません!そのため、それは同じままであり、混乱と混乱をもたらします。)。Array.prototype
length
push
length