条件が満たされた後、forループが続行される原因を知っている人はいますか?私はファイル全体を投稿するだろうが、それはかなり大きい。JS: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に等しい:ここではループがあります4と41で停止します。あなたが提供できるすべての助けがあれば、なぜ私は偉大になるのか理解することができます。
スニペットを上記で更新しました!
また、私は& jが変わったと言いましたが、私がデバッガで見ているときは変わりません。私は今それを見ています - j = 5とdepKeyArr.length
は5です。同様に、i = 42とkeyArr.length
は42です...しかし、私は両方のループの内側、特にswitch文の最後のケースです。 keyArr [i]が未定義のときは失敗します。
OBDMが提供する答えに応じて、ループ内からアレイを更新しないようにangular.copy()
を追加しました。ブール条件が満たされても、ループにステップしています。さらに複雑になるのは、if
の条件でもスイッチの実行を妨げないという事実です。その後、keyArr[i]
によって定義されていないので、
if (!keyArr[i].includes('Params'))
:それは次のようif
を入力して失敗します。
最新のアップデート -
私が正常に最新の変更と内側のループの外に壊れているようだが、それはまだswitch文に継続してkeyArr[i]
で休憩すると、そのスイッチがループとの両方の範囲内であってもif
falseと評価される条件。何
イムわからない:
内側のループが繰り返し処理を続ける場合、外側のループも同じことをどのように知っていますか?あなたの外側のループに関しては、jは決して過去0にならないでしょうか? – JMK
ラベル付きブレークを試してみてください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label –
'i'と' j'は 'のために? – webgodo