所以我对这个FOR循环有一个问题,我无法弄明白。在这种情况下,我知道这需要迭代至少两次。数组至少看起来像这样......
dTrackerArray = {sParentValue, 1234, sParentValue, 5678}
但由于某种原因,这个for循环只删除一个实例而不是所有实例。
var check = $.inArray(sParentValue, dTrackerArray);
if (check != -1) {
for(var i = dTrackerArray.length; i > 0; i--) {
if( dTrackerArray[i] === sParentValue ) {
dTrackerArray.splice(i,1);
dTrackerArray.splice(i-1,1);
}
}}
我真的很感激我能得到的任何帮助!谢谢!
编辑:第二个拼接是用sParentValue删除1234“关联”。它似乎工作正常。
答案 0 :(得分:4)
问题出在for循环中。你从:var i = dTrackerArray.length
开始并取dTrackerArray[i]
这个元素不存在。更多的是你忘了与0索引元素进行交互。因此,您必须将for循环更改为:
for(var i = dTrackerArray.length-1; i >= 0; i--)
答案 1 :(得分:1)
容易错过,但您需要i >= 0
。
修改强> 虽然我认为你的主要问题是你在循环时修改数组。显然,通过我的修复,你会在第二次拼接时出现错误界限。
var check = $.inArray(sParentValue, dTrackerArray);
if (check != -1) {
for(var i = dTrackerArray.length; i >= 0; i--) {
if( dTrackerArray[i] === sParentValue ) {
dTrackerArray.splice(i,1);
dTrackerArray.splice(i-1,1); //when i == 0 then exception
}
}}
由于您知道数组的格式,因此可以使用while循环执行此操作:
var check = $.inArray(sParentValue, dTrackerArray);
while(check > -1)
{
dTrackerArray.splice(check,1);
check = $.inArray(sParentValue, dTrackerArray);
}
答案 2 :(得分:0)
您已经使用调试器完成了这项工作?这可能是你需要做的就是要了解这里发生的事情。我把它放在评论中,但我还没有这些特权。