正在进行一些像素操作,需要加快将元素添加到数组中的算法。现在,我正在抛弃算法期间像素来自的类型化数组。有没有一种快速的方法可以将元素添加到typedArray中,如果没有,您是否可以对当前算法进行任何改进?
我当前的算法如下所示(已简化,并且使用indexsToAdd递增):
//Example input and output
//indexesToAdd = [0,3,4]; // Normally around 4000 elements
//typedArray = [100,200,40,50,100]; // Normally around 1 million elements
//Output = [100,0,200,40,50,0,100,0];
function addIndexes(indexesToAdd, typedArray) {
var newArray = [];
var index = 0;
for(var i=0;i<typedArray.length;i++) {
if (i != indexesToAdd[index]) {
newArray.push(typedArray[i]);
} else {
newArray.push(typedArray[i], 0);
index++;
}
}
return newArray;
}
我考虑过使用拼接器,但Uint8ClampedArray没有此功能。 我还尝试将Uint8ClampedArray转换为常规数组,以便可以使用拼接,但是此转换过程是算法的10倍。
答案 0 :(得分:1)
请考虑以下内容:
尝试此代码以X7-10倍的速度运行(15ms对105ms─1M项):
function addIndexes(indexesToAdd, typedArray) {
var newArray = new Uint8ClampedArray(indexesToAdd.length + typedArray.length);
var index = 0;
var max = typedArray.length;
var c = 0;
for(var i=0;i<max;i++) {
newArray[c] = typedArray[i];
if (i !== indexesToAdd[index]) {
c++;
newArray[c] = 0;
}
c++;
index++;
}
return newArray;
}