Fruit={4:"apple",2:"banana",3:"graps"};
var k;
for(k in Fruit)
{alert(k);}
アラートは 2 3 4
、IE8 & FF & 他のブラウズでこれを解決するのに役立つ場合、Ie9 で順番に表示され4 2 3
ます。私はシーケンスが必要です 4 2 3
Fruit={4:"apple",2:"banana",3:"graps"};
var k;
for(k in Fruit)
{alert(k);}
アラートは 2 3 4
、IE8 & FF & 他のブラウズでこれを解決するのに役立つ場合、Ie9 で順番に表示され4 2 3
ます。私はシーケンスが必要です 4 2 3
JavaScript では、オブジェクトからキーが出てくる順序を制御することはできません。順序が気になる場合は、キーを別の配列に入れます。
var fruit = { 4:"apple", 2:"banana", 3:"grapes" };
var fruitKeys = [ 4, 2, 3 ]
for (var i=0, l=fruitKeys.length; i<l; ++i) {
var k = fruitKeys[i];
alert(k + ":" + fruit[k]);
}
(スタイルのポイントとして、変数名も大文字にするべきではありません。コンストラクター/「クラス」として使用している関数にのみ大文字を使用してください)。
連想配列には順序がないため、ここでの IE9 の動作は正しくありません。この方法で順序を格納できる既存のデータ型はありません。あなたの最善の策は、注文を明示的に保存することです:
var Fruit = [[4, "apple"], [2, "banana"], [3, "graps"]];
for (var i = 0; i < Fruit.length; i++) {
alert(Fruit[i][0]);
}
From the other answers it should be clear that javascript objects aren't ordered. You could use Object.keys
in some browsers to do some kind of sorting. For example:
function objSortedList(obj){
var keys = Object.keys(obj).sort(), key;
while(key = keys.shift()){
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps"};
objSortedList(fruit);
/* =>result:
2: banana
3: graps
4: apple
*/
If you want to keep a predefined order, you could use the same slightly altered function:
function objSortedList(obj,keys){
keys = keys || Object.keys(obj).sort()
var key;
while(key = keys.shift()){
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps"};
objSortedList(fruit,[4,2,3]);
/* =>result:
4: apple
2: banana
3: graps
*/
Another idea may be to store the order as a property of the Object and use that:
function objSortedList(obj,keys){
keys = keys
|| (obj.order ? obj.order.slice() : false)
|| Object.keys(obj).sort()
var key;
while(key = keys.shift()){
if (/^order$/.test(key)){ continue; }
console.log(key+': '+obj[key]);
}
}
//usage
var fruit = {4:"apple",2:"banana",3:"graps",order:[4,3,2]};
objSortedList(fruit);
/* =>result:
4: apple
3: graps
2: banana
*/
For browsers that don't support Object.keys
Mozilla offers a shim here. IE9 supports it.
これをコミュニティ ウィキにする理由は、1)質問者が質問に基準を追加したこと、および 2) この回答が本質的に Mark Reed の回答の修正版であることです。
別のアプローチ ( Mark Reed's answer の修正版) は、 sparse arrayを使用することです。スパース配列は、その長さ内のすべてのインデックスに要素を持たない配列です。Mark のコードをfruit
連想配列に変換すると、次のようになります。
var fruit = new Array();
fruit[2] = "banana";
fruit[3] = "graps";
fruit[4] = "apple";
// The rest of the solution is the same as Mark's:
var fruitKeys = [ 4, 2, 3 ]
for (var i=0, l=fruitKeys.length; i<l; ++i) {
var k = fruitKeys[i];
alert(k + ":" + fruit[k]);
}