我试图使用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;
}
答案 0 :(得分:0)
在JavaScript数组中是对象:
typeof [] === "object" //true
所以不,你不会错过语言方面的任何东西。
可能优化来自运行时,而不是由于不恰当地使用数据结构。