2013-07-17 4 views
1

여러 문자열을 사용하여 동일한 작업을 수행하고 싶습니다. 나는 이런 식으로 그것을 할 싶습니다 for ...의 사용은 허용됩니까?

names = ["NOTE", "REPLICA", "HINT", "VIEW"]; 
for (name in names) { 
    name = names[name]; 
    //do stuff 
} 

은 그 때 나는 this를 참조하십시오. 그것은 여전히 ​​괜찮은가요?

+0

사용하려는 모든 환경에서 예상대로 작동하는 경우 정상입니다. –

+1

키는 여기에 있습니다 : _ "'for..in'은 배열의 인덱스가 아닌 객체의 열거 가능 속성 이름을 반복합니다. 따라서 for 루프가 더 좋습니다. 'for..in'을 사용하여 배열을 반복하는 것은 좋은 습관으로 간주되지 않습니다. – elclanrs

+0

알 수없는 환경에서 작업하기 위해 모듈을 함께 전달할 것입니다. – Glycan

답변

1

이 다수 사용하여 배열을 통해 이동하는 것이 좋습니다 :

var i = 0; 
for(i=0;i<names.length;i++){ 
... 
} 

이미 언급 한 링크를 문서를 그 for ... in 다른에 표시됩니다 Array.prototype으로 또는 Object.prototype에에 물건을 포함하여 다른 개체 속성 사용하지 않는 이유는 .. for for Array의 속도가 느리다는 것입니다.

그 기사에서는 배열의 길이가 크지 만 몇 가지 항목 만 설정되어있는 경우 for ... in이 더 빠를 수있는 경우를 언급합니다.

var stuff, index; 
stuff = []; 
stuff[0] = "zero"; 
stuff[9999] = "nine thousand nine hundred and ninety-nine"; 
stuff.name = "foo"; 
for (index in stuff) 
{ 
    if (stuff.hasOwnProperty(index) && String(Number(index)) === index) { 
     console.log("stuff[" + index + "] = " + stuff[index]); 
    } 
} 
0

그것은 단지 for loop를 사용하는 것보다 훨씬 느리다 :이 경우에 나는 속성이 숫자 인 경우 hasOwnProperty 및 확인과 for ... in을 사용할 수있는 것 같아요.

내 브라우저 (Google 크롬 28.0.1500.72)에서 86% slower 주위.

체크 아웃이 benchmark을 만들었습니다.
for..in 동안 루프 만 110,772 ops/sec (여전히 빠른)에서 실행 for 루프는 내가 일반적으로 objects으로 for..in 루프를 사용 791,792 ops/sec

에 달렸다. 나는 그들이 그것이 실제로 무엇인지 믿습니다.

+0

희소 배열은 for-in ...을 사용하면 더 잘 작동합니다. – dandavis

+0

초당 작동은 사용자가 살펴야 할 측정 기준이 아닙니다. A * for * 루프는 0부터 * length *까지의 각 정수에 대해 한 번 반복됩니다. a * for..in * 루프는 열거 가능한 각 속성에 대해 한 번만 반복합니다. – RobG