【发布时间】:2010-12-31 09:53:54
【问题描述】:
我想知道旋转 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() );
我上面的原始版本有一个缺陷,正如下面 cmets 中 Christoph 指出的那样,正确的版本是(额外的返回允许链接):
Array.prototype.rotateRight = function( n ) {
this.unshift.apply( this, this.splice( n, this.length ) );
return this;
}
是否有更紧凑和/或更快的解决方案,可能是在 JavaScript 框架的上下文中? (以下提议的版本都不是更紧凑或更快)
有没有内置数组旋转的 JavaScript 框架? (仍然没有人回答)
【问题讨论】:
-
我不明白你的例子应该做什么。为什么不直接使用
months[new Date().getMonth()]来获取当前月份的名称? -
@Jean:代码已损坏:按照您的操作方式,它会将拼接的元素作为一个数组而不是单独移动;您必须使用
apply()才能使您的实施工作 -
今天轮换将修改月份以显示此列表(
Dec在第一位):["Dec", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov"] -
@Christoph,你是对的,这不能作为通用旋转功能。它仅在用于立即转换为字符串时才有效。
-
@Jean:您可以通过
Array.prototype.unshift.apply(this, this.splice(...))修复您的版本 - 我的版本做同样的事情,但使用push()而不是unshift()
标签: javascript arrays rotation