JavaScript数组与具有大数据的对象

时间:2014-10-22 20:05:55

标签: javascript arrays performance object hashtable

我试图使用eratosthenes方法的筛子在给定限度下对素数求和。为了比较使用数组和对象存储数据/执行此操作,我编写了两个函数。我发现目标函数的筛网部分比阵列功能的筛网部分长。为什么是这样?是否有一些我不理解的对象底层结构的基本特征?

function sumOfPrimesUsingArray(limit) {
    var primeArray = [],
        i,
        j,
        sum;

    //Crete array filled with values
    for (i = 2; i < limit; i += 1) {
        primeArray[i] = i;
    }

    //Perform the sieve
    for (i = 2; i < limit; i += 1) {
        if (primeArray[i] !== 0) {
            for (j = primeArray[i] + primeArray[i]; j < limit; j += primeArray[i]) {
               primeArray[j] = 0;
            }
        }
    }

    //Sum with a loop 
    sum = 0;
    for (i = 2; i < limit; i += 1) {
        sum += primeArray[i];
    }


    return sum;
}

代码的对象版本......

function sumOfPrimesUsingObject(limit) {
    var primeObject = {},
        i,
        j,
        sum,
        primes;

    //Create object filled with values 
    for (i = 2; i < limit; i += 1) {
        primeObject[i] = i;
    }

    //Perform the sieve (takes forever)
    for (i = 2; i < limit; i += 1) {
        if (primeObject[i] !== undefined) {
            for (j = primeObject[i] + primeObject[i]; j < limit; j += primeObject[i]) {
                delete primeObject[j];
            }
        }
    }

    //Sum with a loop
    sum = 0;
    for (primes in primeObject) {
        if (primeObject.hasOwnProperty(primes)) {
            sum += primeObject[primes];
        }
    }
    return sum;
}

1 个答案:

答案 0 :(得分:0)

在JavaScript数组中是对象:

typeof [] === "object" //true

所以不,你不会错过语言方面的任何东西。

可能优化来自运行时,而不是由于不恰当地使用数据结构。