2012-08-07 57 views
0

可能重复:
For..In loops in javascript - key value pairs得到一个数组项的键,同时在数字索引循环

我需要遍历数组有序,就像在this question。不过,我也需要访问key的名称。我在数值索引循环中如何做到这一点?

for(i=0; i<arr.length; i++){ 
    alert(arr[i].key); // clearly won't work 
} 

for(key in arr){ 
    alert(arr[key]); // works, but it doesn't loop through in the right order 
} 
+3

在一个迭代循环中,整数'i' _is_是关键......如果你有一个单独的键属性,那么你的第一个例子应该工作。 – TheZ 2012-08-07 23:00:31

+0

@Greg,为什么这是重复的?我不问如何使用PHP风格'as'。我问的是如何顺序循环,同时获得一个关键。 – brentonstrine 2012-08-07 23:05:04

+0

你是否在使用jQuery等任何库? – 2012-08-07 23:07:50

回答

1

您无法通过JavaScript对象的属性列表,并期望他们在一个特定的顺序返回。

请阅读blog post并查看关于的部分,了解循环顺序

+0

当然,我可以,正如指出[这里](http://stackoverflow.com/a/7276056/925897)。链接中的循环都没有数字索引。我在问数字索引循环(按照我所知,按顺序排列)以及如何从中获得'key'。 – brentonstrine 2012-08-07 23:03:05

+0

@ brentonstrine - 在数组中,“index”**是**键(即数字属性)的名称。 – RobG 2012-08-07 23:13:45

+0

如@TheZ评论所述,我是关键。对不起,如果我错过了这一点,但键指示对象的属性,而不是数组。 – 2012-08-07 23:15:08

0

如果你想“排序”的对象,那么你可以把键名在数组中,那种,然后在它们的排列顺序,例如访问对象的属性:

var obj = { '3':3, '0':0, '2':2, '1':1}; 
var props = []; 

for (var p in obj) { 

    if (obj.hasOwnProperty(p)) { 
    props.push(p); 
    } 
} 

props.sort(); 

for (var i=0, iLen=props.length; i<iLen; i++0 { 
    alert(obj[props[i]]); // 0, 1, 2, 3 
} 

在关于对象的属性的顺序,ES5表示:

的力学和列举的属性顺序(步骤6.A在 第一个算法,在第二步骤7.A)没有被指定。

http://es5.github.com/#x12.6.4

您可能会发现在一个通俗图书馆的声明“自己的属性首先列举了”,这是由至少一个被广泛使用的浏览器的行为相矛盾的意见,因此应被忽略。