【发布时间】:2013-12-21 13:21:09
【问题描述】:
我想知道在 JavaScript 中将元素从 Array 的开头移动到结尾的最快方法是什么。例如,如果我们有
[8,1,2,3,4,5,6,7]
我们想要:[1,2,3,4,5,6,7,8]
我想将第一个元素移到末尾。我正在考虑将元素 0 与元素 1 切换,然后将元素 1 与元素 2 切换,依此类推,直到 8 位于 and (基本上是冒泡排序的工作原理)。我想知道是否有更快的方法将第一个元素带到最后。
我将使用小型数组(大约 10 个元素),并且我想避免使用 shift(),因为它非常慢。
这就是我现在在 chrome 上所拥有的,它比普通 shift+push 快 45%:http://jsperf.com/shift-myfunc
数组中将包含用于游戏的对象。
【问题讨论】:
-
很遗憾 OP 如何寻找 fastest 方式而不仅仅是 a 并且人们给出一般性答案而没有解释为什么他们更快/比替代品慢。我猜是FGITW。 OP,您的具体用例是什么?你的目标是什么浏览器?数组有多大(它们总是 ~8 个元素吗?它们是 10K 元素吗?),如果你想要真正的基准测试,你需要更加具体。
-
感谢编辑澄清 - 下一轮:它们是像
[1,2,,,5,8]那样稀疏的数组还是它们总是满(就像你的例子),它们总是只包含整数吗?您的目标浏览器/引擎是什么?您每秒最多需要进行多少次此类转换的迭代? -
@BenjaminGruenbaum 如果 OP 事先说明他们尝试了什么并且可能没有一般性的答案,那将会有所帮助。有问题的努力=回答的努力。使用 JSPerf 进行简单的测试会很好。 :)
-
@epascarello True - fastest 做某事的方式在这里非常依赖于目标 JS 引擎、数组大小、它包含的内容等等 - 我'我还在等待被说服 OP 真的需要它那么快并且需要付出什么代价(例如,如果他经常旋转,那么将数组的副本连接到自身并对其进行切片可能会很好,使用类型化数组或使用其他有用的技巧)。我知道 you 和 j08691 绝对是这里的好人,因为他们知道你的许多其他答案,但鉴于模棱两可,回答一个似乎毫无意义。
标签: javascript arrays element