我正在研究一个codewars问题,但不明白为什么会发生这种特殊情况。** 编辑 - codewars问题要求你不使用任何现有的数组或对象原型方法.我正在迭代一个数字和数字作为字符串的数组,如果0或 "0 "将它们放在最后。我在一个 "0 "后面放置了一个0,它仍然是一个int,但当我在它后面放置另一个 "0 "时,它变成了一个字符串。这是代码。
function removeZeros(array) {
let z = array.length - 1;
for (let i = 0; i <= z; i++) {
console.log(array);
if (array[i] === 0 || array[i] === '0') {
const x = array[i];
for (let j = i; j <= z; j++) {
array[j] = array[j + 1];
}
array[array.length - 1] = x;
z -= 1;
i -= 1;
}
}
return array;
}
console.log(removeZeros([1, '0', 5, 0, '5', 52, '0', 7, 0, '3', 1]));
而在控制台中,这里是有关步骤的数组。
[
1, 5, '5', 52, '0',
7, 0, '3', 1, '0',
0
]
[
1, 5, '5', 52, 7,
0, '3', 1, '0', '0',
'0'
]
你不断移动数组的一个较小的前缀,但总是把0(任何一种类型)塞进最后一个位置,这样早期的0实际上不会被移动。 相反,你可以把0移到你正在处理的前缀的最后。