Javascript For循环并不总是在IE中工作

时间:2011-07-26 19:02:38

标签: javascript jquery

经过两天的搜索,我陷入困境,可以真正使用一些帮助。

我有一个javascript数组,迭代后会给我每个后续数组的键。除了某些版本的IE之外,这适用于所有浏览器。在某些版本的IE中,它似乎首先在返回密钥之前按升序对数组进行重新排序。 Jquery的每个函数都是一样的。有没有相当于javascript for循环,不会重新排序数组,并仍然适用于每个人?

var db = new Array();
db[259] = new Array(3);
db[259][0] = "John Smith";
db[259][1] = "Los Angeles";
db[259][2] = "Chicago";

db[917] = new Array(3);
db[917][0] = "Jane Smtih";
db[917][1] = "New York";
db[917][2] = "Tampa";

db[208] = new Array(3);
db[208][0] = "Jack Johnson";
db[208][1] = "Baltimore";
db[208][2] = "Milwaukee";

for(var i in db){document.write(i + " ");}

在大多数浏览器中,上面会输出259 917 208.这是我想要的结果。

在某些版本的IE中,上面会输出208 259 917.看起来它首先按升序排序。关键在这里很重要,因为它是人的ID#并且排名很重要(即,259应该在208之前)。其他函数引用db [i],其中i是人的ID#。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

在JavaScript for-in循环中无法保证Arrays的迭代顺序;但是,大多数JS实现自然地对索引进行排序(当然,IE的旧版本除外)。

如果您提前知道索引,则应将它们分别存储以进行显式迭代:

var idxs = [259, 917, 208], i;
for (i=0; i<idxs.length; i++) {
  document.write(db[idxs[i]]);
}

答案 1 :(得分:2)

For...in不适用于JavaScript中的数组,并不保证它适用于Object(其中一个数组恰好是“工作”的原因)。使用正确的forwhile循环

参考:For...in

答案 2 :(得分:0)

您可能希望查看jQuery的each()函数。