Мне было интересно, что является наиболее эффективным способом вращения массива JavaScript.
Я придумал это решение, где положительное n
поворачивает массив вправо, а отрицательное n
влево (-length < n < length
):
Array.prototype.rotateRight = function( n ) {
this.unshift( this.splice( n, this.length ) )
}
Который затем можно использовать следующим образом:
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
months.rotate( new Date().getMonth() )
Моя оригинальная версия выше имеет недостаток, как указывает Кристоф в комментариях ниже, правильная версия (дополнительный возврат позволяет связывать):
Array.prototype.rotateRight = function( n ) {
this.unshift.apply( this, this.splice( n, this.length ) )
return this;
}
Есть ли более компактное и/или более быстрое решение, возможно, в контексте инфраструктуры JavaScript? (ни один из предложенных ниже вариантов не является ни более компактным, ни более быстрым)
Есть ли какая-либо инфраструктура JavaScript со встроенным вращением массива? (До сих пор никто не ответил)