任何人都可以提出一种方法来削减此脚本的任何时间吗?
var countObject = new Object();
var length = data.length;
for(var i = 0; i < length; i += 4) {
var key = data[i] + ',' + data[i+1] + ',' + data[i+2];
if(typeof(countObject[key]) == 'number') {
countObject[key]++
} else {
countObject[key] = 0
}
}
建立从画布检索的数据中找到的RGB值的出现次数。推测来自context.getImageData()的数据已经是优化的数组类型......?
编辑:我不需要格式为&#34; 255,255,255&#34;的RGB值。必然,它只是我用来作为数组键的所有东西。我们也欢迎采用不同的方法:-D
答案 0 :(得分:2)
我不知道这是否会产生任何显着差异(你必须有一个很多值才能看到明显的性能差异),但你可以:
所以:
for(var i = 0, l = length; i < l; i += 4) {
var key = (data[i] << 16) + (data[i+1] << 8) + data[i];
countObject[key] = (countObject[key] || 0) + 1;
}
编辑:既然你提到从键中取回RGB值,这就是它的完成方式:
/**
* From a color key (integer) return an object
* with keys 'r', 'g' and 'b'
*/
var colorFromKey = function(key) {
return {
'r': (key >> 16) & 0xFF,
'g': (key >> 8) & 0xFF,
'b': key & 0xFF
};
}
答案 1 :(得分:1)
任何人都可以提出一种方法来刮掉这个脚本吗?
不,似乎很好,但我还有其他一些建议:
var countObject = new Object(); // use {} instead, that's more common
var length = data.length; // why that? You are already using var l=...
for(var i = 0, l = length; i < l; i += 4) {
var key = data[i] + ',' + data[i+1] + ',' + data[i+2];
if(typeof(countObject[key]) == 'number') { // remove the brackets. typeof is no function
countObject[key]++ // ; missing
} else {
countObject[key] = 0 // are you sure this should not start with 1?
}
}
如果你有一个彩色图像,之前countObject
的初始化可能会更快(将每个可能的键设置为0
)。然后为每次迭代保存if条件。