【发布时间】:2019-11-07 11:46:13
【问题描述】:
我有一段代码,其中包含一些窗口警报消息。它工作正常。但是,如果我删除警报语句,程序将进入无限循环。这对我来说很奇怪。
有人可以帮我找出代码的问题吗?
function countSwaps(arr) {
let notVisited = {}, swaps = 0;
for (let i = 0; i < arr.length; i++) {
notVisited[i] = true;
}
while (Object.keys(notVisited).length) {
alert("main pass");
let nextPos, currentPos = Object.keys(notVisited)[0];
while (arr[currentPos] !== parseInt(currentPos+1)) {
nextPos = arr[currentPos] - 1;
[arr[currentPos], arr[nextPos]] = [arr[nextPos], arr[currentPos]];
swaps+= 1;
alert("Swap " + arr[currentPos] + " and " + arr[nextPos] + "\n");
delete notVisited[nextPos];
}
delete notVisited[currentPos];
}
return swaps;
}
console.log(countSwaps([2,3,4,1,5]));
【问题讨论】:
-
即使存在警报,内部循环也在循环。
-
注意:切勿使用
alert进行调试。它改变了代码的时间。使用调试器和/或console.log。
标签: javascript arrays sorting object alert