我有一个数组数组,用于在屏幕上绘制图 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/