我有这个小代码来源
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"
我仍然无法解释为什么这是发生或做什么来解决它。所以,如果您有任何想法,请分享。
答案 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)
我发现了什么问题。似乎有时小图像被加载第一个如此大的图像出现在顶部。这完全是关于图像加载。无论如何,谢谢你的答案,每个人都帮助我调试问题。