【问题标题】:Meet a strange phenomenon of JavaScript Array.indexOf (in Node.js)遇到 JavaScript Array.indexOf 的奇怪现象(在 Node.js 中)
【发布时间】: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


    【解决方案1】:

    由于某种原因,您的结果可能是浮点数。 JavaScript 只有一个 Number 类。它不是乘法、除法的好语言。但我想将它转换为 Int 并不是一件坏事。我不认为发生这种情况有一个非常具体的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2012-02-20
      • 2013-02-06
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      相关资源
      最近更新 更多