经过两天的搜索,我陷入困境,可以真正使用一些帮助。
我有一个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#。
有人可以帮忙吗?
答案 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(其中一个数组恰好是“工作”的原因)。使用正确的for
或while
循环
参考:For...in
答案 2 :(得分:0)
您可能希望查看jQuery的each()函数。