在javascript中将数组移到右边

mik*_*e44 10 javascript

我有这个数组:

var arr1 = ['a1', 'a2', 'a3', 'a4', 'a5'];
Run Code Online (Sandbox Code Playgroud)

我需要通过两个位置将它移到右边,比如说

arr1 = ['a4', 'a5', 'a1', 'a2', 'a3']; 
Run Code Online (Sandbox Code Playgroud)

这适用于左移:

arr1 = arr1.concat(arr1.splice(0,2)); // shift left by 2
Run Code Online (Sandbox Code Playgroud)

我明白了:

arr1 = ['a3', 'a4', 'a5', 'a1', 'a2']; 
Run Code Online (Sandbox Code Playgroud)

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

zer*_*kms 17

向右移动到N位置==向左移动到array.length - N位置.

因此,为了阵列向右移动2个位置 - 只需将其向左移动3个位置.

只要你已经拥有另一个功能,就没有理由再实现它.加上shift/unshift/pop循环的解决方案几乎没有效率splice + concat


gil*_*ly3 14

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

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

  • 返回数组会很好 (2认同)

小智 9

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

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

arr1.unshift.apply(arr1, arr1.splice(3,2));
Run Code Online (Sandbox Code Playgroud)

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

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


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

arr1.push.apply(arr1, arr1.splice(0,2));
Run Code Online (Sandbox Code Playgroud)