Ваш
nums.shift(nums[i]);
удалит (и сбросит ) все, что существует в 0
-ом индексе в nums
в то время. Вероятно, было бы легче передать в другой массив , если num не 0
, а затем объединить массивы в конце (без сортировки):
var moveZeroes = function(nums) {
var ZeroArray = []
var nonZeroArray = [];
for (let i = 0; i < nums.length; i++) {
if (nums[i] === 0) {
ZeroArray.push(nums[i])
} else {
nonZeroArray.push(nums[i]);
}
}
return [...nonZeroArray, ...ZeroArray];
};
console.log(moveZeroes([0, 1, 0, 3, 12])) //Should return [ 1,3,12,0,0]
Или, если вы хотите .sort
, .sort
только :
var moveZeroes = function(nums) {
nums.sort((a, b) => (a === 0) - (b === 0));
return nums;
};
console.log(moveZeroes([0, 1, 0, 3, 12])) //Should return [ 1,3,12,0,0]
Проверьте === 0
- иначе ваш
.sort((a,b)=>(a-b))
поставит отрицательные числа после 0
s, когда вы хотите, чтобы 0
s пришли в конце независимо от того.
Если вам также необходимо сохранить исходный порядок ненулей, выполнить итерацию по массиву, склеить 0
с, отслеживая, сколько вы удаляете, а затем push
их на конец:
var moveZeroes = function(nums) {
let count = 0;
for (let i = nums.length - 1; i >= 0; i--) {
if (nums[i] === 0) {
nums.splice(i, 1);
count++;
}
}
nums.push(...new Array(count).fill(0));
return nums;
};
console.log(moveZeroes([0, 1, 0, 3, 12])) //Should return [ 1,3,12,0,0]