0

我正在处理代码战问题,但不明白为什么会发生这种特殊情况。** 编辑 - 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'
]
4

1 回答 1

0

您不断移动数组的较小前缀,但总是将 0(任何一种类型)填充到最后一个位置,以便更早的 0 实际上不会被移动。相反,您可以将 0 移动到您正在使用的前缀的末尾。

于 2020-06-15T15:33:57.520 回答