2014-12-29 2 views
0

일부 데이터 필터링을 수행하는 함수를 작성하고 있습니다. 나는이 쓰기 :배열 데이터 만 반환 Array.prototype을 사용하여 함수 자체를 반환하지 않고

Array.prototype.keyFilter = function() 
{ 
    var dta = this; 

    for (i in dta) 
    { 
     console.log(dta[i]); 
    }; 
}; 

console.log(['green','yellow','blue'].keyFilter('type')); 

을 그리고 반환은 다음과 같습니다

green 
yellow 
blue 
function() 
    { 
     var dta = this; 

     for (i in dta) 
     { 
      console.log(dta[i]); 
     }; 
    } 
undefined 

OK, 나는 배열 데이터를 얻을 수 ... PLUS 함수 자체와 "정의되지 않은". Array.prototype을 사용하여 배열 데이터 만 얻는 방법 ??

도움 주셔서 감사합니다.

+3

'for ... in'이 아닌 배열을 반복하기 위해서는 보통'for' 루프를 사용해야합니다 – elclanrs

답변

3

여러분은 프로토 타입에 추가 한 함수를 포함하여 개체의 열거 가능한 속성을 반복하는 for...in을 사용하고 있습니다. 그게 expressly not how you're meant to iterate over arrays입니다.

당신이 배열을 반복하려면, 당신은 간단한 for 루프를 사용하고, length - 10에서 계산한다 ...

for (var i = 0; i < this.length; ++i) { 
    console.log(this[i]); 
} 

또는 forEach 사용

this.forEach(function (i) { 
    console.log(i); 
}); 

"undefined"부분은 함수의 반환 값을 로깅하는 바깥 쪽 console.log(...)입니다. 아무 것도 반환하지 않기 때문에 undefined입니다.