【发布时间】:2015-07-14 04:26:09
【问题描述】:
当我尝试解决 ProjectEuler No.27 时,我遇到了一个奇怪的 JavaScript Array.indexOf 问题(在 Node.js 中)。 代码如下:
var primes = require('./primes1000.js');
var bigPrimes = require('./primes50000.js');
var maxNumber = 2;
var maxPair = {};
var getQuadratic = function(b) {
var i = 0;
var a = 0;
while (Math.abs(a) < 1000) {
var prime = primes[i];
var a = prime - 1 - b;
var length = getMaxNumber(a, b) - 1;
if (length > maxNumber) {
maxNumber = length;
maxPair = {
a: a,
b: b
};
console.log(maxPair, maxNumber);
}
i++;
}
};
var getMaxNumber = function(a, b) {
var isPrime = true;
var n = 1;
while (isPrime) {
n = n + 1;
var result = (n + a) * n + b;
isPrime = (bigPrimes.indexOf(result) !== -1);
// if ((a === 1) & (b === 41)) {
// console.log(result, isPrime);
// }
}
return n;
};
for (var i = 0; i < primes.length; i++) {
getQuadratic(primes[i]);
}
primes1000.js 和 primes50000.js 是这样写的:
module.exports = [2,3,5,7,11,13,17,...,997];
module.exports = [2,3,5,7,11,13,17,...,611953];
问题发生在
bigPrimes.indexOf(result)
当result = 47时,indexOf方法返回-1,表示未找到。
经过大量调试和测试,最后我将节点更改为
bigPrimes.indexOf(parseInt(result))
然后就可以了。
但是结果
typeof result
和
typeof bigPrimes[14]
都是“数字” 和
parseInt(result) === result
返回真。
我不明白为什么我必须 parseInt 才能获得 indexOf 的正确返回值。
【问题讨论】:
标签: javascript arrays node.js indexof parseint