我在JavaScript中有一个2D数组(500 x 500)来存储游戏地图,当我遍历所有元素时,它不需要时间。但是当我介绍这一行
let cell = map[i][j];
这花费了很多时间,因为它总共必须查找250000个索引。当您根本没有查找任何索引时,该循环需要40毫秒才能完成,而不是几乎为零,那么我该如何加快这一过程?
编辑:
我对数组的解释不是很好,所以这里有更多信息
var map = new Array(500);
for (var i = -500 / 2; i < 500 / 2; i ++) {
map[i] = new Array(500);
}
这是用来创建地图的,当我想在30、10处放置一块石头时,我只能使用map[30][10] = 4
(4是一块石头的ID)
for (let i = -500 / 2; i < 500 / 2; i ++) {
for (let j = -500 / 2; j < 500 / 2; j ++) {
cell = map[i][j];
用于遍历数组,然后可以检查索引是否包含对象以及播放器是否应与之碰撞。
答案 0 :(得分:2)
问题可能是由于您使用了负索引。
JavaScript数组本质上是对象,而数组索引只是其键为整数的属性。但是,它们经过优化,可以处理从0
开始的顺序整数的正常情况-它们存储在顺序存储器中,类似于在C等传统语言中实现数组的方式。
当您访问不是非负索引的数组索引时,会将其视为普通对象属性。这比普通的数组索引效率低得多,它需要将索引转换为字符串并对其进行哈希处理。
如果要将数组视为具有从-250
到249
的索引,请在将它们用作索引之前将250
添加到i
和j
:
var map = new Array(500);
for (var i = -500 / 2; i < 500 / 2; i ++) {
map[i+250] = new Array(500);
}
for (let i = -500 / 2; i < 500 / 2; i ++) {
for (let j = -500 / 2; j < 500 / 2; j ++) {
cell = map[i+250][j+250];
}
}