在javascript中将数组移到右边

Shift array to right in javascript

本问题已经有最佳答案,请猛点这里访问。

我有这个阵列:

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

我需要把它右移两个位置,比如

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

这适用于左换档:

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

我得到:

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

但我不知道怎么做右移…


N偏离正确位置移到左array.length - N=到的位置。

这样就在2位置移到你只是在它左移阵列3的位置。

没有理由去实现另一个功能是当你已经有一个。解决方案A是一个环加shift/unshift/pop几乎将AS AS splice + concat高效


你可以使用.pop()得到最后的项目和.unshift()把它在前方。

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


使用.concat()你建设一个新的阵列,和更换旧的一个。那是一个问题,如果你有其他的引用数组,他们不会被更新,所以他们还持有的移动版本。

做右键,和现有的阵列mutate,实际上,你可以这样做:

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

这是variadic unshift()法,让你的护照和.apply多参数存储在存储器阵列的类的集合。

因此,.splice()变异由除最后两个数组,返回他们的变异,和.unshift()数组添加一个由.splice()返回到开始。

左移会改写类似于右移,自是variadic:.push()

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