我在JavaScript中有一个二维数组(500x500)来存储游戏地图,当我循环所有的元素时,它不需要时间。但是当我介绍这条线路的时候
let cell = map[i][j];
这需要这么多的时间,因为它必须查找总共250000个索引,循环需要40毫秒才能完成,而不是几乎为零,当您不在al查找任何indexex时,我如何才能加速这个过程?
编辑:
我没有很好地解释我的数组,所以这里有更多信息
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];
用于遍历数组,然后我可以检查索引是否包含对象,以及玩家是否应该与其发生冲突。
发布于 2018-07-24 08:09:50
这个问题可能是由于您使用了负索引。
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];
}
}
https://stackoverflow.com/questions/51488449
复制相似问题