在javascript中将数组移到右边

时间:2013-04-19 04:35:27

标签: javascript

我有这个数组:

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']; 

但我不知道怎么做右移...

3 个答案:

答案 0 :(得分:16)

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

所以要在你阵列的2个位置右转 - 只需将它向左移动3个位置。

没有理由在您拥有其他功能后立即执行。在循环中使用shift/unshift/pop的解决方案几乎不会像splice + concat

那样高效

答案 1 :(得分:11)

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

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

答案 2 :(得分:6)

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

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

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

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

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


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

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