Поскольку последнее выражение, которое встречается в цикле for
, i++
здесь всегда будет выполняться после тела цикла.Таким образом, учитывая текущую логику, независимо от того, что является входным массивом, i
будет 0
в начале тела цикла только во время первой итерации:
function bouncer(arr) {
for (let i = 0; i < arr.length; i++) {
console.log('i:', i);
if (!arr[i]) {
arr.splice(i, 1);
i = 0;
}
}
console.log(arr);
}
console.log(bouncer([false, null, 0, NaN, undefined, ""]));
Вместо этого вы можете сбросить i
на -1
, в результате чего i++
превратит i
в 0
в начале следующего тела цикла:
function bouncer(arr) {
for (let i = 0; i < arr.length; i++) {
console.log('i:', i);
if (!arr[i]) {
arr.splice(i, 1);
i = -1;
}
}
console.log(arr);
}
console.log(bouncer([false, null, 0, NaN, undefined, ""]));
Или, конечно, вместо этого используйте .filter
, .filter
гораздо проще рассуждать о:
const bouncer = arr => arr.filter(Boolean);
console.log(bouncer([false, null, 0, NaN, undefined, ""]));