我想知道旋转 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() );
我上面的原始版本有一个缺陷,正如 Christoph 在下面的评论中指出的那样,正确的版本是(附加返回允许链接):
Array.prototype.rotateRight = function( n ) {
this.unshift.apply( this, this.splice( n, this.length ) );
return this;
}
是否有更紧凑和/或更快的解决方案,可能在 JavaScript 框架的上下文中? (下面的建议版本都不是更紧凑或更快)
有没有内置数组旋转的 JavaScript 框架? (仍然没有人回答)
原文由 Jean Vincent 发布,翻译遵循 CC BY-SA 4.0 许可协议
改变数组的类型安全的通用版本:
在评论中,Jean 提出了代码不支持重载
push()
和splice()
的问题。我不认为这真的有用(见评论),但一个快速的解决方案(虽然有点 hack)是替换这条线有了这个:
使用
unshift()
而不是push()
在 Opera 10 中几乎快两倍,而 FF 中的差异可以忽略不计;编码: