首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE9关联数组

IE9关联数组
EN

Stack Overflow用户
提问于 2012-04-24 19:17:31
回答 4查看 477关注 0票数 4
代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

发布于 2012-04-24 19:27:40

在JavaScript中,无法控制关键点从对象中发出的顺序。如果您关心顺序,请将键放在单独的数组中:

代码语言: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

票数 6
EN

Stack Overflow用户

发布于 2012-04-24 19:28:15

关联数组没有顺序,所以IE9在这里的行为是正确的。现有的数据类型不能以这种方式存储订单。最好的办法是显式地存储订单:

代码语言:javascript
复制
var Fruit = [[4, "apple"], [2, "banana"], [3, "graps"]];
for (var i = 0; i < Fruit.length; i++) {
    alert(Fruit[i][0]);
}
票数 2
EN

Stack Overflow用户

发布于 2012-04-24 19:41:09

从其他答案中可以清楚地看出,javascript对象是没有排序的。您可以在某些浏览器中使用Object.keys进行某种排序。例如:

代码语言:javascript
复制
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
*/

如果你想保持一个预定义的顺序,你可以使用相同的略微改变的函数:

代码语言:javascript
复制
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存储为对象的属性并使用它:

代码语言:javascript
复制
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支持它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10296817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档