按键排序数组或:为什么我的for循环执行无序
Sort array by key OR: Why is my for loop executing out of order?
我有一个对象数组,我需要根据一些配置数据将其按一定顺序放置。我有一个问题,通过迭代数组在适当的顺序。我认为,如果我创建了数组,然后使用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
}
这应该会给我一个像这样的数组:
//var printOrder[undefined,foo,bar,a_shrubbery,foobar]
但是当我尝试遍历数组时:
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]);
}
我得到foo, bar, foobar, a_shrubbery
作为输出。
我需要按键值对这个数组进行排序,或者按正确的顺序逐步进行。
数组实例的数字索引属性的迭代应该始终使用数字索引:
for (var x = 0; x < printOrder.length; ++x) {
// whatever with printOrder[x]
}
使用"for…in"形式的语句不会让你得到可预测的顺序,正如你所看到的,它也可能有其他奇怪的效果(特别是当你混合在JavaScript框架或工具库或其他)。它用于遍历对象的属性名,并且不会对Array实例进行特殊处理。
您需要创建一个函数来查找数组中的值,如下所示:
Array.prototype.indexOf = function(value)
{
var i = this.length;
while ( i-- )
{
if ( this[ i ] == value ) return i;
}
return -1;
};
你可以这样使用它:
//NOTICE: We're looping through LINKS not ORDER
for ( var i = 0; i < links.length; i++ )
{
var index = order.indexOf( i );
//It's in the order array
if ( index != -1 ) printOrder[ i ] = links[ i ];
}
记住:你需要确保json返回的值是整数。如果它们是字符串,那么在传递给indexOf时需要将整数转换为字符串。
你的问题的功能,你建议它应该工作。
http://jsfiddle.net/NRP2D/8/。
很明显,在这个简化的例子中,你已经删除了你在实际情况中所犯的任何错误。
相关文章:
- 我的javascript for循环不起作用
- 我如何选择/点击一个带有for=“”的元素"属性[量角器]
- 我的Javascript for循环在1次迭代后停止
- 为什么我的“for”循环只获取 html 中的最后一项
- Javascript:connection.query函数正在破坏我的for循环
- 我的 for 循环有什么问题
- 如何将 Facebook For Unity SDK 与我的 Unity (Javascript) 项目集成
- LearnBoost的Up for Node.js似乎无法正确重新启动我的应用程序
- JavaScript for-loop:如何让我的数字转换器工作
- 调整图像大小以使其完美地适合幻灯片,问题仍然是用 for 循环将 CSS 代码替换为我的图像
- 我的 for 循环中的这些小数从何而来
- 为什么我的函数不是 do for 循环
- CasperJS只从我的for循环中多次发布最后一项
- 初学者JavaScript - 重新启动我的for循环
- JavaScript: else 语句在 for.in 循环中破坏了我的 if 语句
- 如何防止 javascript 在 for 循环中破坏我的表
- 为什么我的 for 循环来一次
- Javascript:我的数组的大小随着每次for循环迭代而减小.为什么
- 我如何让这个 JavaScript 数字猜谜游戏在没有“while”或“for”循环的情况下工作
- 我的js for循环在0之后停止