는 방법을 제외에 추가 배열의 방법에서의 처리에 대한"..에"루프?(자바스크립트)

StackOverflow https://stackoverflow.com/questions/1809505

  •  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 시간을 의미합니다.는 경우에 당신은 몇 가지 성과 측정,결과 흥미로운 일이 될 것이다 그래서 공유하십시오!:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top