【问题标题】:Shift array to right in javascript [duplicate]在javascript中向右移动数组[重复]
【发布时间】:2013-04-12 09:54:50
【问题描述】:

我有这个数组:

var arr1 = ['a1', 'a2', 'a3', 'a4', 'a5'];

我需要将它向右移动 2 个位置,例如

arr1 = ['a4', 'a5', 'a1', 'a2', 'a3']; 

这适用于左移:

arr1 = arr1.concat(arr1.splice(0,2)); // shift left by 2

我明白了:

arr1 = ['a3', 'a4', 'a5', 'a1', 'a2']; 

但我不知道如何右移...

【问题讨论】:

    标签: javascript


    【解决方案1】:

    右移至N 位置 == 左移至array.length - N 位置。

    所以要为您的阵列向右移动 2 个位置 - 只需将其向左移动 3 个位置。

    一旦你已经有了另一个功能,就没有理由去实现它。加上循环中 shift/unshift/pop 的解决方案几乎不会像 splice + concat 那样高效

    【讨论】:

    • 是否有 cmet 投反对票?
    • 如果n 大于array.length 怎么办?
    • @Pete 如果可能,那么应该另外实施检查。 n = n % array.length
    【解决方案2】:

    您可以使用.pop() 获取最后一项,使用.unshift() 将其放在最前面:

    function shiftArrayToRight(arr, places) {
        for (var i = 0; i < places; i++) {
            arr.unshift(arr.pop());
        }
    }
    

    【讨论】:

    • 最好返回数组
    【解决方案3】:

    使用.concat() 您正在构建一个新数组,并替换旧数组。这样做的问题是,如果您对 Array 有其他引用,它们将不会被更新,因此它们仍将保留未移位的版本。

    要进行右移,并实际改变现有数组,您可以这样做:

    arr1.unshift.apply(arr1, arr1.splice(3,2));
    

    unshift() 方法是可变参数,.apply 允许您传递存储在类似数组的集合中的多个参数。

    所以.splice() 通过删除最后两个并返回它们来改变数组,.unshift() 通过将.splice() 返回的数组添加到开头来改变数组。


    左移将被重写,类似于右移,因为.push() 也是可变参数:

    arr1.push.apply(arr1, arr1.splice(0,2));
    

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2020-05-12
      • 2020-03-31
      • 2022-01-05
      相关资源
      最近更新 更多