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

时间:2015-07-28 05:57:39

标签: javascript arrays algorithm optimization game-physics

我正在编写一个Snake游戏

enter image description here

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

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

表示蛇的链接的元素,然后蛇移动的方式是弹出elem_n,将其位置更改为elem_0加上翻译单位{{1}的位置}和dx,然后将它放在数组的开头:

dy ---> [elem_0, elem_1, ..., elem_n]

(在此过程中更改了[elem_n, elem_0, ..., elem_(n-1)]的某些内部属性)

这样做的方法是什么,在

之间不做任何妥协
  • 操作和内存使用次数最佳效率
  • 可读
  • 维护
  • 聪明(可选)
  • 优雅
  • 紧凑

????

3 个答案:

答案 0 :(得分:9)

  

操作和内存使用次数最佳效率

你要求两个通常相互对立的优化。例如更快的速度==更多的记忆。

那就是说,我可能会选择a (doubly) linked list来存储我的蛇,因为前面或尾部的移除或添加都非常便宜,而且对于游戏来说,更快就更容易记忆(在合理范围内,但是我想知道你的蛇在遇到记忆问题之前需要多长时间......远远超出可玩的......以及一些。)

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

答案 1 :(得分:3)

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

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

links.push(links.shift());

第一种方法可以解决您的问题。

答案 2 :(得分:2)

对于ES3转发的任何Javascript版本:

links.unshift(links.pop());