는 방법을 제외에 추가 배열의 방법에서의 처리에 대한"..에"루프?(자바스크립트)
-
05-07-2019 - |
문제
추가했 몇 가지 유용한 도우미 Array
(등 toSource()
대 오페라).지금 for..in
반환하는 기능으로 정상적인 속성입니다.
내가 사용하는 for..in
기 때문에,지금은 코드가 쉽게 읽습니다.와 그것의 기본 기능의 js,을 합니다 그래서 빠르게 할 수 있습니다.
그러나 추가하는 유형을 확인 루프에 사용하기 쉬워집니다 classic for(;;)
.
어떤 방법을 피 for..in
열거 기능을 가지고 있는가?
크로스 브라우저에 작동하지 않는다.(해 오페라에서 작동),하지만 속도가 중요합니다.
감사합니다.
편집:
이 있는 능력을 피 for..in
열거 기능 또는 사용자 정의 속성에서 어떤 목적입니까?
해결책
야 지 사용한 루프에서 반복 이상 배열 요소입니다.에 대한 자세한 설계에 대한 반복 성, 고 사용해야 하는,대한 정확한 이유는 당신은 단지 설명한다.많은 라이브러리 수정을 배열,날짜,등등 시제품,그래서 당신은에 의존하지 않아야 합니다..에서 반복 단지 배열 요소입니다.사용 for(;;)방법,그것은 보장 당신이 무엇을 원합니다.고 그것보다 더 빨리에 대한 자세한하기 때문에,그것은 기본으로 자바 스크립트습니다.
에 대한 더 많은 정보에 대해 읽기에 prototype.js 라이브러리입니다.
다른 팁
그렇지만,그것의 자바스크립트 1.7+-니다.오페라에만 있는 제한 자바 스크립트 1.7 지원을 포함하는 매우 기본적인 지원의 선언 및 할당 그래서 이 작동하지 않습니에 오페라 하지만 그것은에서 작동합니다.
이 구현할 수 있을 안전하게 사용하기 for [each](item in array)
:
Array.prototype.__iterator__ = function (flag) {
var len = this.length, i = 0;
for (; i < len; i++) {
yield flag ? i : this[i];
}
};
다른 사람으로 진술,사용하지 않아야 합니다에 대한 자세한 반복을 통해 배열입니다.그것보다 느리게 사용하 for(;;).
당신은 또한 캐시 배열의 길이는 당신이 우려하는 성능으로:
for (var i=0, len=arr.length; i<len; i++)
{
...
}
에 대해서만 사용됩니다.를 통해 반복하는 특성의 개체입니다.를 제외하고 상속된 특성을 사용합니 hasOwnProperty()메소드:
for (var prop in object)
{
// Don't include properties inherited from the prototype chain
if (object.hasOwnProperty(prop))
{
...
}
}
또 다른 옵션으로 지금 ES5 지원,그것을 정의할 수 있 비 열거 속성!그것이 있어야 가능한(하지만 나는 테스트하지 않았)을 다음과 같은 것이 가능합니다.
Object.defineProperty( Array.prototype, "myNewMethod", {
value: function(){},
writable: true,
enumerable: false, /* this controls for..in visibility */
configurable: true
});
당신이 설명하는 이유를 정확하게 당 사용
for (var i=0; i<arr.length; i++) { ... }
는 대신:
for (var item in arr) { ... }
기 때문에 그들은 다릅니다.
당신이 원하지 않는 경우 모든 회원은 당신을 얻을 것이에서 두 번째는 형태와 색인 요소는 다음 사용하 첫번째 형태입니다.
편집:수정된 잘못된 typeof 사용량 감사@Bergi's 댓글
에 대한 좋은 점은 성능을 반복할 때 이상(아주)sparse 배열은 내가 말하는데 아마도를 사용하여 isNaN(parseInt())에서 루프를 찾을 수 있습 배열 요소:
for( var propertyName in myArray){
if( !isNaN(parseInt(propertyName)) ){ /* probably array element */ }
}
I don't know what 수행하는 더 나의 hasOwnProperty()에 위의 접근 방식을 하지만입니다.당신은 단순히 측정이 아주 큰 배열을 반복하고 그것을 10000 시간을 의미합니다.는 경우에 당신은 몇 가지 성과 측정,결과 흥미로운 일이 될 것이다 그래서 공유하십시오!:)