簡體   English   中英

JS:條件為假后,For循環將繼續迭代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM