javascript for循环随机返回

时间:2012-09-03 14:23:58

标签: javascript random for-loop while-loop

我有这个小代码来源

for (i = 0; i < elements.length; i++) {
     console.log(i);
     (function (i) {
         if (elements[i]["id"] == id) {
             index = i;
             console.log(i);
         }
     })(i);
}

console.log(index);

我想找到一个数组的元素索引,其中子元素“id”= id;但它有时返回0 simetimes 1.此代码位于类中的函数内。我调用相同的函数两次,但在类之外使用不同的参数,所以首先它必须显示0和1,但有时它显示1和0。所以你可以帮助我吗?我也尝试过这种方法,但它不起作用。

var i = 0;
while (i < elements.length) {
    console.log(elements[i]["id"]);
    if (elements[i]["id"] == id) {
        index = i;
        break;
    } else if (elements[i]["id"] != id) {
        i++;
    }
}

console.log(index);

Here is my test page,如果您使用Chrome打开它(有时它会在Firefox中发生它主要发生),您会看到有时会出现小图像,但有时当您按下按钮时它会消失。您还可以在“inspect elements - &gt; console”

中查看控制台输出

修改

我改变了我的代码以便更好地进行调试(正如Lando建议的那样):

for (i in elements){
    console.log("comparing elements['"+ i +"']['id']: "+ elements[i]["id"] +" with id:' "+ id + "'");
        if(elements[i]["id"] == id){
            index = i;
        }
    }

console.log(index);

并获得了控制台输出:

comparing elements['0']['id']: id2 with id:' id1' Slideshow.js:140
comparing elements['1']['id']: id1 with id:' id1' Slideshow.js:140
1 Slideshow.js:147
comparing elements['0']['id']: id2 with id:' id2' Slideshow.js:140
comparing elements['1']['id']: id1 with id:' id2' Slideshow.js:140
0 

应该是:

comparing elements['0']['id']: id1 with id:' id1' Slideshow.js:140
comparing elements['1']['id']: id2 with id:' id1' Slideshow.js:140
0 Slideshow.js:147
comparing elements['0']['id']: id1 with id:' id2' Slideshow.js:140
comparing elements['1']['id']: id2 with id:' id2' Slideshow.js:140
1 

编辑2

看到输出结果后,数组“元素”中的对象会改变位置,elements[0]["id"]成为"id2",应该是"id1"我仍然无法解释为什么这是发生或做什么来解决它。所以,如果您有任何想法,请分享。

Here is my JSfiddle link

2 个答案:

答案 0 :(得分:1)

我认为您必须将代码更改为此,没有内部函数(闭包)(第一个console.log将帮助您调试代码(或者您可以只使用firebug并在该行中设置断点)

for (i in elements){
    console.log("comparing elements['"+ i +"']['id']: "+ elements[i]["id"] +" with id:'"+ id + "'");
    if(elements[i]["id"] == id){
        index = i;
        console.log(i);
    }
}

console.log(index);

请记住,javascript数组不一定是基于零的,甚至不一定是顺序的,因此“for in”将帮助您避免可能的错误。我删除了封闭,因为在这种情况下我没有看到你真的需要它。

答案 1 :(得分:1)

我发现了什么问题。似乎有时小图像被加载第一个如此大的图像出现在顶部。这完全是关于图像加载。无论如何,谢谢你的答案,每个人都帮助我调试问题。