[英]JS: For loop continues to iterate after condition is false
有誰知道在滿足條件后導致我的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
條件條件的結果為false。
一般而言,將循環的停止條件設置為“動態值”(即在循環中迭代時可以更改的值)是一種不好的做法。
以下代碼生成一個無限循環:
for (var j = 0; j < depKeyArr.length; j++) {
depKeyArr.push("whatever");
}
而不是在變量中設置停止條件可以防止行為不明確:
var depKeyArrLen = depKeyArr.length;
for (var j = 0; j < depKeyArrLen; j++) {
depKeyArr.push("whatever");
}
“有誰知道在滿足條件后導致我的for循環繼續的原因?我會發布整個文件,但是它很大。這是循環:”
我不確定“ //等等更多的代碼”是什么,但是在這里,您需要確保該部分中沒有涉及變量i和j的值更改的操作,因為通常我們會進行i,j, k,l等,如果您在該循環中有另一個循環,並且不知不覺地放入了j,因為在i之后,您知道以后會發生什么。
對於可能遇到類似情況的任何人,這只是程序無法在循環中附加最終的角度服務時發生的奇怪行為。
我遍歷了它,最后不得不大步退后,質疑這些假設。 我假設循環成功完成,但沒有成功。 那就是答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.