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

Javascript For loop doesn't always work in IE

本文关键字:IE 工作 For 循环 Javascript      更新时间:2023-09-26

经过两天的搜索,我被卡住了,真的需要一些帮助。

我有一个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 #。

有人能帮忙吗?

在JavaScript for-in循环中数组的迭代顺序不保证;然而,大多数JS实现自然地排序索引(当然,旧版本的IE除外)。

如果你提前知道索引,你应该将它们分开存储,以便显式迭代:

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

For...in在JavaScript中并不意味着数组,也不保证它是用于对象的顺序(数组恰好是这就是为什么它"工作")。使用合适的forwhile

参考:…

您可能想看看jQuery的each()函数