首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript二维数组查找速度极慢

JavaScript二维数组查找速度极慢
EN

Stack Overflow用户
提问于 2018-07-24 07:26:54
回答 1查看 159关注 0票数 1

我在JavaScript中有一个二维数组(500x500)来存储游戏地图,当我循环所有的元素时,它不需要时间。但是当我介绍这条线路的时候

代码语言:javascript
复制
let cell = map[i][j];

这需要这么多的时间,因为它必须查找总共250000个索引,循环需要40毫秒才能完成,而不是几乎为零,当您不在al查找任何indexex时,我如何才能加速这个过程?

编辑:

我没有很好地解释我的数组,所以这里有更多信息

代码语言:javascript
复制
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 )

代码语言:javascript
复制
for (let i = -500 / 2; i < 500 / 2; i ++) {
   for (let j = -500 / 2; j < 500 / 2; j ++) {
      cell = map[i][j];

用于遍历数组,然后我可以检查索引是否包含对象,以及玩家是否应该与其发生冲突。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 08:09:50

这个问题可能是由于您使用了负索引。

Javascript数组本质上是对象,而数组索引只是键为整数的属性。但是,它们经过了优化,可以处理从0开始的连续整数的正常情况--这些整数存储在顺序内存中,类似于C等传统语言中实现数组的方式。

当你访问一个非负索引的数组索引时,它被视为一个普通的对象属性。这比普通的数组索引效率低得多,它需要将索引转换为字符串并对其进行散列。

如果要将数组视为具有从-250249的索引,请在将其用作索引之前将250添加到ij中:

代码语言:javascript
复制
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];
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51488449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档