我有这个数组:
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)
小智 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)