Chr*_*ski 2 javascript arrays for-loop
我有一个对象数组,我需要按照一定的顺序放置,具体取决于一些配置数据.我有一个问题,以正确的顺序itterating通过数组.我想如果我制作了数组,然后逐步执行for循环,我就能正确执行代码.除了一个用例之外,它工作得很好,我将第四个项添加到数组中,然后返回第三个项.
links[0] = foo
links[1] = bar
links[2] = foobar
links[3] = a_herring
links[4] = a_shrubery
order = [] //loaded from JSON, works has the numbers 1 2 3 or 4 as values
//in this case:
order[0] = 1
order[1] = 2
order[2] = 4
order[3] = false
order[4] = 3
for(x in order){
if(order[x]){
printOrder[order[x]]=links[x]
//remember that in this case order[0] would
}
Run Code Online (Sandbox Code Playgroud)
这应该给我一个如下所示的数组:
//var printOrder[undefined,foo,bar,a_shrubbery,foobar]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过数组进行迭代时:
for(x in printOrder){
printOrder[x].link.appendChild(printOrder[x].image)
printOrder[x].appendChild(printOrder[x].link)
printOrder[x].appendChild(printOrder[x].text)
document.getElementById("myDiv").appendChild(printOrder[x]);
}
Run Code Online (Sandbox Code Playgroud)
我得到foo, bar, foobar, a_shrubbery输出作为输出.
我需要按键值对此数组进行排序,或者按正确顺序逐步执行此操作.
迭代数组实例的数字索引属性应始终使用数字索引:
for (var x = 0; x < printOrder.length; ++x) {
// whatever with printOrder[x]
}
Run Code Online (Sandbox Code Playgroud)
正如您所见,使用语句的"for ... in"形式将无法获得可预测的排序,并且它也可能具有其他奇怪的效果(特别是当您混合使用JavaScript框架或工具库或其他任何内容时).它用于迭代对象的属性名称,并且不会特别处理Array实例.