有没有人知道在满足条件后会导致我的for循环继续的原因是什么?我会发布整个文件,但它非常大。这是循环:
for (var j = 0; j < depKeyArr.length; j++) {
var directory = angular.copy(dependencies[depKeyArr[j]]),
keyArr = angular.copy(Object.keys(directory));
for (var i = 0; i < keyArr.length; i++) {
var next = i + 1;
if (keyArr[i] && !keyArr[i].includes('Params')) {
if (keyArr[next] && keyArr[next].includes('Params')) {
directory[keyArr[next]] = directory[keyArr[next]].split(', ') !== [''] ? directory[keyArr[next]].split(', ') : undefined
directory[keyArr[next]].push(directory[keyArr[i]])
}
var paramArr = directory[keyArr[next]] ? directory[keyArr[next]] : directory[keyArr[i]]
switch (depKeyArr[j]) {
case 'controller':
angular.module('app').controller(keyArr[i], paramArr)
break
case 'directive':
angular.module('app').directive(keyArr[i], paramArr)
break
case 'factory':
angular.module('app').factory(keyArr[i], paramArr)
break
case 'filter':
angular.module('app').filter(keyArr[i], paramArr)
break
case 'service':
angular.module('app').service(keyArr[i], paramArr)
break
}
}
}
}
因此,此特定实例中的depKeyArr.length
等于5,keyArr.length
等于42.两个for循环在满足这些条件时继续执行,尽管事实上我希望它们停止在4和41.您可以提供任何帮助,以便我可以找出为什么会很棒。
上面更新的代码段
另外 - 你们都提到过i&amp; j改变了,但是当我在调试器中查看它时,它们没有变化。我现在正在看它 - j = 5而depKeyArr.length
是5.同样,i = 42而keyArr.length
是42 ......然而我在两个循环内部,特别是在switch语句中的最后一种情况。当keyArr [i]未定义时,它会失败。
为了回应OBDM提供的答案,我添加了angular.copy()
以防止从循环内部更新数组。当满足布尔条件时,它仍然进入循环。更令人困惑的是,即使if
条件也不能阻止它执行开关。它应该无法输入以下if
:
if (!keyArr[i].includes('Params'))
因为当时keyArr[i]
未定义。
似乎我已经成功地使用最新更改中断了内部循环,但它仍然继续到switch语句并在keyArr[i]
上中断,即使该开关位于两个循环内且{{1} } conditional,其值为false。
答案 0 :(得分:1)
以下代码生成无限循环:
BaseSetAssoc::BlkType
而不是在变量中设置停止条件,以防止出现不明行为:
for (var j = 0; j < depKeyArr.length; j++) {
depKeyArr.push("whatever");
}
答案 1 :(得分:0)
“有人知道在条件满足后会导致我的for循环继续吗?我会发布整个文件,但它很大。这是循环:”
我不确定“//等等更多代码”,但是在这里你需要确保在那部分没有涉及变量i和j的值变化的操作,因为通常我们做一个i的序列循环,j,k,l等等,如果你有另外一个循环,那么bla bla更多的代码并且无意识地放j,因为在我之后,你知道后来发生了什么......
答案 2 :(得分:0)
对于任何可能遇到类似情况的人来说,这只是程序未能在循环中附加最终角度服务时发生的奇怪行为。
我把它翻过来,最后不得不退后一步,质疑这些假设。我假设循环成功完成,但他们没有。答案就是这样。