javascript for循环随机返回

标签 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 和 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 中大多发生),你会看到有时会出现小图像,但有时按下按钮时它会消失。您还可以在“检查元素 -> 控制台”中查看控制台输出

编辑

我更改了代码以便更好地调试,如下所示(正如 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”中的对象改变了位置,elements[0]["id"] 变成了 "id2" 。 be "id1" 我仍然无法明确地说出为什么会发生这种情况或如何解决它。因此,如果您有任何想法,请分享。

Here is my JSfiddle link

最佳答案

我认为你必须将代码更改为此,没有内部函数(闭包)(第一个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”将帮助您避免可能的错误。我删除了关闭,因为我认为在这种情况下您实际上并不需要它。

关于javascript for循环随机返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249707/

相关文章:

javascript - 如何强制函数在使用 Mocha/Chai 调用时抛出异常

三角数组中的 Java 偏置随机数

c - C语言中如何按属性对对象进行排序

java - 对于带有基元的每个循环修改

javascript - 如何更改嵌套标签中第一个标签的文本?

javascript - 检测 "File download"弹出窗口何时关闭

javascript - 带有切换功能的 jQuery 悬停功能不起作用

java - 如何在Java中获取随机字母?

c - 如何将 rand() 结果设置为一定范围内的值,包括负值?

python - 遍历 Python 中的字符串列表