我正在检查JavaScript中的数字数组是否为pandigital。简而言之,这意味着如果它是一个9位数字,那么它必须具有所有数字1-9。我已经对数字数组进行了排序,并且我有以下循环:
for(var i = 0; i < 9; i++) {
if(parseInt(digits[i]) != i+1) {
return false;
}
}
但我只是想知道以下是否会更快:
for(var i = 0; i < 9; i++) {
if(digits[i] != (i+1).toString()) {
return false;
}
}
我不确定哪一个更快。我觉得转换为字符串比解析数字更快。我试图进行一些测试,但我还没有确定出任何结论:我的计算机已经老了,结果已经到位了。
哪一个会更快,为什么?速度差异会随着数字的增加而增加吗?
修改
digits
是一组排序的数字字符串,例如:
var digits = [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ];
答案 0 :(得分:4)
答案 1 :(得分:1)
我认为两者都不是很快,取决于优化器有多好。
完全避免字符串转换并直接使用序数值(没有这种临时分配)可能要快得多:
for (var i = 0; i < 9; i++) {
if (digits.charCodeAt(i) != 48 /* '0' */ + i + 1) {
return false;
}
}
这是我在快速检测到pandigital数字时的努力:
function pandigital(s) {
var seen = [0,0,0,0,0,0,0,0,0];
for (var i = 0; i != s.length; ++i) {
var ord = s.charCodeAt(i);
if (ord <= 48 || ord > 48 + s.length) return false;
if (seen[ord - 48 - 1]++) return false;
}
return s.length > 0;
}