0
에라토스테네스 접근 방식을 사용하여 지정된 한도 내에서 소수를 합치려고합니다. 데이터 저장/수행을위한 배열과 객체의 사용을 비교하기 위해 필자는 두 가지 기능을 썼다. 객체 함수의 체 부분이 배열 함수의 체 부분보다 더 오래 걸리는 것을 발견했습니다. 왜 이런거야? 어쩌면 이해할 수없는 기본 구조의 근본적인 특징이 있습니까? 대용량 데이터가있는 JavaScript 배열 대 객체
typeof [] === "object" //true
그래서 아니, 당신은 아무것도 언어 현명한 실종되지 않습니다 자바 스크립트 배열에서
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;
}
근본적으로 배열이 연속 숫자 인덱스의 오브젝트보다 효율적인 이유는 무엇입니까? 이거 놀랍 니? 더 일반적인 목적의 객체보다 구체적으로 설계된 것보다 어레이가 더 좋을까요? – jfriend00
배열은 정수 인덱스에 최적화되어 있습니다. 'delete'ing 속성은 매우 비쌉니다. 'primeObject [j] = undefined'를 사용하여 다른 실행을 시도해보십시오. – Bergi
글쎄, 배열은 확실히 최고의 옵션입니다. 여전히 사용중인 작업은 다릅니다. 다음은 객체가있는 최적화 된 예제입니다. 차이가 1.5-2 배가되는 것을 볼 수 있습니다. http : //jsfiddle.net/pfn1knmn/ – juvian