javascript - 循环遍历缺少索引的数组的最快方法

标签 javascript arrays performance indexing

我有一个数组数组,用于在屏幕上绘制图 block map (基本上是一个列数组,每列都是一个图 block 数组)。我尝试通过不设置包含空图 block 的数组索引来加快绘制过程,但它并没有更快。

var a1 = [];
a1[0] = 1;
a1[100] = 1;
a1[200] = 1;
a1[300] = 1;

var a2 = [];
for( var i = 0; i <= 300; i++ ) {
    a2[i] = 1;
}

当我比较这两个 100,000 次循环所需的时间时,a2 稍快一些。当我尝试使用 ( for var x in y ) 来代替数组和对象时,速度慢了 4 - 12 倍。

如果循环遍历一个对象要慢很多,并且删除 99% 的数组(不仅仅是从末尾)并不能使其更快,那么有什么方法可以真正使其更快吗?

最佳答案

数组中不要有空洞,只需完全填充即可(也可以预先分配以避免动态调整大小)

var a1 = new Array(301);
for (var i = 0; i < a1.length; ++i) a1[i] = 0;
a1[0] = 1;
a1[100] = 1;
a1[200] = 1;
a1[300] = 1;

正常循环(切勿使用 for.in,如果需要迭代键,请使用 Object.keys):

for (var i = 0; i < a1.length; ++i) {
    if (a1[i] !== 0) {
        //Non empty
    }
}

关于javascript - 循环遍历缺少索引的数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23990604/

相关文章:

javascript - 将 Ext.Loader 配置为每个命名空间有一个文件

javascript - 使用 jQuery 获取 html 文档中的链接值?

javascript - 如何将对象添加到数组

javascript - 在两个方向上迭代一个范围

javascript - JS eval 非常慢需要更好的方法

javascript - 将响应式文件管理器与tinymce结合使用 - 创建用户 session

javascript - 在 Backbone.js 中,先按一列,然后按第二列对两列集合进行排序

javascript - 在数组中查找字符串

database - 如何在维护历史和当前数据时获得性能?

即使使用主索引并且良好的 EXPLAIN 计划,MySQL 查询也很慢