2

我有这个小代码源

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);

我想找到一个数组的元素索引,其中 sub element "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);

这是我的测试页面,如果您使用 Chrome 打开它(有时会发生,但在 Firefox 中通常会发生),您会看到有时会出现小图像,但有时会在按下按钮时消失。您还可以在“检查元素 -> 控制台”中看到控制台输出

编辑

我更改了我的代码以获得更好的调试(正如兰多建议的那样):

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"我仍然不能明确地说为什么会发生这种情况或如何解决它。因此,如果您有任何想法,请分享。

这是我的 JSfiddle 链接

4

2 回答 2

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”将帮助您避免可能的错误。我删除了关闭,因为在这种情况下我看不到你真的需要它。

于 2012-09-03T14:55:48.133 回答
1

我发现了问题所在。似乎有时会加载小图像,第一个如此大的图像出现在顶部。这都是关于图像加载的。无论如何感谢您的回答,大家帮我调试问题。

于 2012-09-05T19:55:36.010 回答