首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组向右移动,并将缺少的空格设为0

将数组向右移动,并将缺少的空格设为0
EN

Stack Overflow用户
提问于 2020-10-24 05:55:15
回答 2查看 69关注 0票数 0

我正在尝试将一个数组向右移动一个设定值,并将现在缺少的空格替换为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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-24 06:07:28

只需要用0和pop表示最后一个数字的unshift

代码语言:javascript
运行
复制
function shiftArray(arr, numberOf0s) {
  for (let i = 0; i < numberOf0s; i++) {
    arr.unshift(0);
    arr.pop();
  }
}

代码语言:javascript
运行
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2020-10-24 06:22:39

与大多数语言通过像insert这样的方法在任何地方操作数组类型的数据结构一样,unshift也不是很理想。这是因为数组的元素存储在内存中的方式,即连续存储。因此,每次insertunshift操作都需要移动后面的所有元素,以保持这种“邻接性”。基本上,除非在处理数组时万不得已,否则应该避免使用这些方法。

幸运的是,在这种情况下,您可以反向迭代数组,将元素复制到其正确的位置,并用0填充O(n)解的剩余位置,其中n是数组的长度:

代码语言:javascript
运行
复制
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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64507748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档