Я пытаюсь понять, как работает этот цикл do / while с оператором break
. Я думал, что всякий раз, когда выполняется оператор break (первые две итерации, так как условие if является истинным в те времена, но не в третий раз), цикл for экранируется и, следовательно, n не увеличивается. Но строка console.log(`n is ${n}`)
logs n is 2
n is 2
n is 5
- как она прыгает с 2 до 5? Я думал, что это будет 3 в третий раз (когда условие if не истинно, поскольку quot
равно 60
, а 60 % 2
равно 0, и, следовательно, оператор break
не выполняется).
// newArray = [5, 4, 3, 2, 1];
var quot = 0;
var loop = 1;
var n;
do {
quot = newArr[0] * loop * newArr[1];
for (n = 2; n < newArr.length; n++) {
if (quot % newArr[n] !== 0) {
break;
}
}
console.log(`n is ${n}`)
loop++;
} while (n !== newArr.length);
Вот полный код (решение для freeCodeCamp challenge ):
function smallestCommons(arr) {
// Sort array from greater to lowest
// This line of code was from Adam Doyle (http://github.com/Adoyle2014)
arr.sort(function(a, b) {
return b - a;
});
// Create new array and add all values from greater to smaller from the
// original array.
var newArr = [];
for (var i = arr[0]; i >= arr[1]; i--) {
newArr.push(i);
}
// Variables needed declared outside the loops.
var quot = 0;
var loop = 1;
var n;
// Run code while n is not the same as the array length.
do {
quot = newArr[0] * loop * newArr[1];
for (n = 2; n < newArr.length; n++) {
if (quot % newArr[n] !== 0) {
break;
}
}
console.log(`n is ${n}`)
loop++;
} while (n !== newArr.length);
return quot;
}
// test here
smallestCommons([1,5]);