我正在尝试将一个数组向右移动一个设定值,并将现在缺少的空格替换为0。我就是想不出怎么做。
移动前的数组:
let array = [1,2,3,4,5,6,7]
向右移动2后的数组:
array = [0,0,1,2,3,4,5]
我看过其他堆栈溢出帖子,但它们只是将数据包装在一起,使向右移动看起来像这样:
array = [6,7,1,2,3,4,5]
而我只想去掉6和7。
发布于 2020-10-24 06:07:28
只需要用0和pop
表示最后一个数字的unshift
。
function shiftArray(arr, numberOf0s) {
for (let i = 0; i < numberOf0s; i++) {
arr.unshift(0);
arr.pop();
}
}
function shiftArray(arr, numberOf0s) {
for (let i = 0; i < numberOf0s; i++) {
arr.unshift(0);
arr.pop();
}
return arr;
}
let array = [1,2,3,4,5,6,7];
console.log(array);
shiftArray(array, 2);
console.log(array);
发布于 2020-10-24 06:22:39
与大多数语言通过像insert
这样的方法在任何地方操作数组类型的数据结构一样,unshift
也不是很理想。这是因为数组的元素存储在内存中的方式,即连续存储。因此,每次insert
或unshift
操作都需要移动后面的所有元素,以保持这种“邻接性”。基本上,除非在处理数组时万不得已,否则应该避免使用这些方法。
幸运的是,在这种情况下,您可以反向迭代数组,将元素复制到其正确的位置,并用0填充O(n)解的剩余位置,其中n
是数组的长度:
const moveToRight = (array, n) => {
if (array === undefined || array.length == 0) {
return;
}
if (n < 0) {
throw 'Error n cannot be negative!';
}
let i = array.length - 1;
while (i >= 0 + n) {
array[i] = array[i - n];
i--;
}
while (i >= 0) {
array[i] = 0;
i--;
}
return;
}
array = [1, 2, 3, 4, 5, 6, 7];
try {
moveToRight(array, 2);
} catch (e) {
console.error(e);
}
console.log(array);
https://stackoverflow.com/questions/64507748
复制相似问题