Fruit={4:"apple",2:"banana",3:"graps"};
var k;
for(k in Fruit)
{alert(k);}警报将被2 3 4在Ie9中的顺序时,在IE8 & FF和其他浏览给4 2 3帮助我走出这一步。我需要序列是4 2 3
发布于 2012-04-24 19:27:40
在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]);
}(从风格上讲,您也不应该将变量名大写;只对用作构造函数/“类”的函数使用大写)。
fiddle
发布于 2012-04-24 19:28:15
关联数组没有顺序,所以IE9在这里的行为是正确的。现有的数据类型不能以这种方式存储订单。最好的办法是显式地存储订单:
var Fruit = [[4, "apple"], [2, "banana"], [3, "graps"]];
for (var i = 0; i < Fruit.length; i++) {
alert(Fruit[i][0]);
}发布于 2012-04-24 19:41:09
从其他答案中可以清楚地看出,javascript对象是没有排序的。您可以在某些浏览器中使用Object.keys进行某种排序。例如:
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
*/如果你想保持一个预定义的顺序,你可以使用相同的略微改变的函数:
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
*/另一个想法可能是将order存储为对象的属性并使用它:
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
*/对于不支持Object.keys的浏览器,Mozilla提供了一个shim here。IE9支持它。
https://stackoverflow.com/questions/10296817
复制相似问题