20

私はこの配列を持っています:

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

でも右シフトのやり方がわからない…

4

3 に答える 3

21

位置を右にNシフト == 位置を左にシフトarray.length - N

したがって、配列の 2 つの位置で右にシフトするには、3 つの位置で左にシフトするだけです。

すでに機能があればすぐに別の機能を実装する理由はありません。さらに、ループ内のソリューションはshift/unshift/popかろうじて効率的ですsplice + concat

于 2013-04-19T04:38:25.517 に答える
21

.pop()最後のアイテムを取得.unshift()して前に置くために使用できます。

function shiftArrayToRight(arr, places) {
    for (var i = 0; i < places; i++) {
        arr.unshift(arr.pop());
    }
}
于 2013-04-19T04:38:42.097 に答える