在 Javascript 中,将数组的最后一个元素带到开头的最紧凑、优雅和高效的方法是什么?

In Javascript, what is the most compact, elegant and efficent way to bring the last element of an array to the beginning?

我正在编写贪吃蛇游戏

蛇的运动逻辑决定了如果我有一个 Javascript 数组

var links = [elem_0, elem_1, ..., elem_n];

个表示蛇链接的元素,那么蛇的移动方式是弹出elem_n,将其位置改为elem_0加上翻译单元dxdy,然后放在数组的开头:

[elem_0, elem_1, ..., elem_n] ---> [elem_n, elem_0, ..., elem_(n-1)]

(在此过程中更改了 elem_n 的一些内部属性)

之间不妥协的方法是什么?

????

optimally efficient in number of operations and memory usage

您要求进行两项通常相互抵消的优化。例如更快的速度 == 更多的内存。

也就是说,我可能会选择 a (doubly) linked list 来存储我的蛇,因为在前端或尾部移除或添加非常便宜,而且对于游戏来说,更快比更少的内存更可取(在合理范围内,但我想知道在你 运行 出现内存问题之前你的蛇需要多长时间......远远超出可玩的范围......还有一些)。

当然,我假设您已经测量并发现基于标准数组的方法太慢(似乎不太可能)。

对于从 ES3 开始的任何 Javascript 版本:

links.unshift(links.pop());

您可以通过两种方式旋转数组:

links.unshift(links.pop());   or

links.push(links.shift());

第一种方法解决了你的问题。