【发布时间】:2012-08-28 07:11:54
【问题描述】:
我有这么小的代码源
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);
Here is my test page, 如果你用 Chrome 打开它(有时它会发生,但在 Firefox 中它主要发生)你会看到有时会出现小图像,但有时当你按下按钮时它会消失。您还可以在“inspect elements -> 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" 我仍然不能明确地说为什么会发生这种情况或该怎么做修理它。所以如果您有任何想法,请分享它。
【问题讨论】:
-
else if (elements[i]["id"] != id) ??你可以用 else 替换它
-
那不是答案,而是评论:)
-
旁注:第一个 sn-p 中的关闭是不需要的。如果涉及到 async (例如绑定事件处理程序、超时等),您只需要这种类型的构造
-
我更新了我的帖子,您可以在其中看到测试网页和问题本身
-
您的代码按预期工作,您看到它返回 0 和 1 的原因是因为该方法被调用了两次,一次使用“id1”,一次使用“id2” $("#has" ).click(function(){ slideshow.animate('#id1', {opacity: 1}, 500); slideshow.animate('#id2', {x:200, y:100, opacity: 1}, 300 ); });
标签: javascript random for-loop while-loop