splice
возвращает массив удаленных элементов. Если вы делаете
arr.splice(index, 1).push(0)
, то вы перемещаетесь в массив удаленных нулей (и это выражение впоследствии впоследствии отбрасывается).
Вы также не должны изменять массив во время итерациииз-за этого - это приведет к очень запутанному поведению.
Рассмотрите возможность фильтрации нулей, вместо этого передавая массив нулей, а затем объединяйте два массива:
const moveZeros = (arr) => {
const zeros = [];
return arr
.filter((elm) => {
if (elm === 0) {
zeros.push(0);
return false;
}
return true;
})
.concat(zeros);
};
console.log(moveZeros([0, 1, 2, 3]));
console.log(moveZeros([3, 2, 1,0, 1, 2, 3]));