2009-02-25 13 views
89

Prototype JavaScript 프레임 워크를 사용하여 객체의 모든 속성을 반복 할 수 있습니까? 여기 Prototype을 사용하여 자바 스크립트에서 객체의 모든 속성을 반복 처리 하시겠습니까?

상황이다 : 나는 변수 response에의 해당 JSON 응답을 평가하는 경우에, 나는 각을 반복 할 수 있도록하려면

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

: 나는 이런 식으로 뭔가를 보이는 JSON에 AJAX 반응을 얻고있다 속성을 사용하여 response.barobj 개체에서 어떤 인덱스가 true이고 어떤 인덱스가 false인지 확인합니다.

프로토 타입 모두 Object.keys()Object.values()이지만 이상하게도 간단한 Object.each() 기능이없는 것 같습니다! 나는 Object.keys()와 Object.values ​​()의 결과를 취할 수 있고 하나를 통해 반복하면서 다른 객체와 상호 참조 할 수 있지만, 그렇게 할 수있는 적절한 방법이라고 나는 확신한다.

답변

42

먼저 convert your object literal to a Prototype Hash에 있습니다 여기에 프로토 타입에 대한 필요가 없습니다

// Store your object literal 
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}} 

// Iterate like so. The $H() construct creates a prototype-extended Hash. 
$H(obj).each(function(pair){ 
    alert(pair.key); 
    alert(pair.value); 
}); 
+0

Perfect! 이것은 내가 찾고 있었던 바로 그 것이다. – OverloadUT

+57

불행히도 Prototype없이 간단한 자바 스크립트 객체를 반복하고 싶었던 비슷한 질문이 있었기 때문에 이제는이 대답을 "복제"로 인해 닫힌 질문과 동일하게 처리해야합니다. 그래서 끔찍한 예제는 사용자가 Prototype을로드하도록합니다. 사용자는 Prototype에 대해 아무 말도하지 않았으므로 원치 않는 라이브러리를로드하도록 강요하는 것은 유용하지 않습니다. (이것을 마치 중복 된 것처럼 취급하는 것을 기억하십시오). 중복되는 거짓 주장으로 인해 다른 질문이 종료되지 않은 경우 답변을 거절 할 필요가 없습니다. –

+2

Asker가 Prototype을 원한다고 언급하지 않았습니까 (또는 질문을 수정 했습니까?). 어쨌든 괜찮습니다. – emurano

0

키를 반복하고 대괄호를 사용하여 값을 가져와야합니다.

은 참조 : How do I enumerate the properties of a javascript object?

편집 :은 물론,이 질문 중복을합니다.

+0

hasOwnProperty()을 확인 없다는 것을 확실하지 않은 경우 : http://www.prototypejs.org/api/array – OverloadUT

+1

또한 프로토 타입 고유의 솔루션을 찾고 있었기 때문에 이것이 중복 된 것으로 생각하지 않습니다. 다른 질문은 프레임 워크를 사용하지 않으려는 사람에게는 괜찮은 것이지만 Prototype을 사용하는 경우이 솔루션은 훨씬 안전합니다. – OverloadUT

+1

@OverloadUT :주의 깊게 읽지 않았습니다. 일반 객체가 아닌 배열의 속성을 반복하는 것이 바람직하지 않습니다. – Christoph

546

: 자바 스크립트 for..in 루프를 가지고있다. 당신이 Object.prototype 엉망 아무도, 즉,뿐만 아니라 방법이 강하게 프로토 타입 문서에 대해 낙담 것을

for(var prop in obj) { 
    if(obj.hasOwnProperty(prop)) 
     doSomethingWith(obj[prop]); 
} 
+139

원하지 않는 라이브러리를로드하지 않고 실제 응답 해 주셔서 감사합니다. –

+8

답답한 대답이 아닙니다. 질문에 프로토 타입이 사용되어야한다고 나와 있습니다! 선택의 자유 - 하하 ... –

+11

+1 질문의 제목에 대한 올바른 대답입니다. –

관련 문제