【发布时间】:2017-01-30 23:14:40
【问题描述】:
有谁知道在满足条件后什么会导致我的 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 & 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] 上中断,即使该开关在两个循环内和一个评估的if 条件为假。
【问题讨论】:
-
如果内循环继续迭代,你怎么知道外循环也在迭代呢?关于你的外循环,j 不会永远超过 0 吗?
-
您确定
i和j在for之外没有变化吗? -
@JoaozitoPolo 我对此进行了研究,但我想我需要一个条件,因为我只想在超过条件时跳出循环......但是这个错误忽略了其中的条件循环,它只是直接回到最后一个 switch 语句。这是最奇怪的事情......
标签: javascript angularjs for-loop conditional-statements