使用缺少索引循环遍历数组的最快方法

时间:2014-06-02 08:49:40

标签: javascript arrays performance indexing

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

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略快一些。当我尝试使用(对于y中的var x)时,使用数组和对象,它们的速度要慢4到12倍。

如果循环通过一个对象要慢得多,并且删除99%的数组(不仅仅是从结尾)并没有让它变得更快,那么有什么方法可以让它更快?

1 个答案:

答案 0 :(得分:2)

阵列中没有孔,只需完全填充(也预先分配以避免动态调整大小)

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
    }
}