객체 속성을 반복


2040

var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    console.log(propt + ': ' + obj[propt]);
}

변수 propt는 객체의 속성을 어떻게 나타 냅니까? 내장 메서드 나 속성이 아닙니다. 객체의 모든 속성이 나타나는 이유는 무엇입니까?


11
if (typeof(obj[propt]) === 'object') {/ * 다시해라 * /}
noob

13
이 질문에 정말 죄송합니다. 루프가 무엇인지 알고 있습니다. "개체 속성을 통한 루핑"에 대해 머리를 맞출 수 없었습니다. 또한, 그들은 나를 추천했습니다. "단계 2nd Edition의 JavaScript Step-학교에서 Steve Suehring
Rafay

242
이것은 훌륭한 초보자 질문입니다. 다른 언어에 대한 15 년의 전문적인 경험이 있으며이 답변이 필요하다고 덧붙였습니다. 내가 할 수 있다면 나는 플러스 2000입니다.
Nathan C. Tresch

60
미친 짓이지만 몇 년 동안이 페이지를 방문하여이 작업을 수행하는 방법에 대한 구문을 다시 배웠습니다. 이 작업을 수행하는 방법을 기억하지 않아도 ...이 페이지가 항상 여기에 있음을 기억합니다.
HDave

14
이것은 내가 OverStack에서 본 가장 이상한 페이지입니다. 질문을주의 깊게 읽으면 실제로 하나의 질문에 대한 답변 만 시도하기 시작하며 점수는 -6입니다. 가장 높은 점수를받은 답변은 대답 할뿐만 아니라 단순히 잘못된 것입니다.

답변:


2426

속성을 반복하려면 다음 추가 hasOwnProperty확인 이 필요합니다 .

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

객체의 프로토 타입에는 기술적으로 객체의 일부인 객체에 대한 추가 속성이 포함되어 있어야합니다. 이러한 추가 속성은 기본 개체 클래스에서 상속되지만 여전히의 속성입니다 obj.

hasOwnProperty 단순히 이것이 기본 클래스에서 상속 된 것이 아니라이 클래스에 특정한 속성인지 확인합니다.


hasOwnProperty객체 자체를 통해 호출 할 수도 있습니다 .

if (obj.hasOwnProperty(prop)) {
    // do stuff
}

그러나 객체에 같은 이름의 관련이없는 필드가 있으면 실패합니다.

var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo');  // TypeError: hasOwnProperty is not a function

따라서 Object.prototype대신 호출하는 것이 더 안전한 이유입니다 .

var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo');  // true

21
@BT Mozilla 문서 에 따르면 : "프로토 타입이 아닌 객체 자체에 연결된 속성 만 고려하려면 getOwnPropertyNames를 사용 하거나 hasOwnProperty 검사를 수행하십시오 (propertyIsEnumerable도 사용 가능)."
davidmdem

3
전화의 요점은 정확히 무엇입니까 object.hasOwnProperty()? property어떤 가치가 있다는 사실 이 그 가치를 암시하지 object않습니까?
Alex S

6
객체의 프로토 타입 인 Alex S에는 기술적으로 객체의 일부인 객체에 대한 추가 속성이 포함되어 있기 때문입니다. 기본 개체 클래스에서 상속되지만 여전히 속성입니다. hasOwnProperty는 단순히 이것이 기본 클래스에서 상속 된 것이 아니라이 클래스에 특정한 속성인지 확인합니다. 좋은 설명 : brianflove.com/2013/09/05/javascripts-hasownproperty-method
Kyle Richter

87
그러나 Object.keys (obj)는 객체 자체의 키를 얻는 데 훨씬 더 나은 솔루션이라고 언급해야한다고 생각합니다. Mozilla 문서 링크 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Kyle Richter

9
중요한 정보 중 하나가 누락되었습니다. property여기에 문자열이 있습니다 propertyName. 그렇지 않으면 나와 같은 JS 초보자에게 혼란을 유발할 수 있습니다 if.
Neolisk

1136

JavaScript 1.8.5부터는 Object.keys(obj)객체 자체에 정의 된 속성 배열 (에 대해 true를 반환하는 속성)을 가져 오는 데 사용할 수 있습니다 obj.hasOwnProperty(key).

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

이것은 for-in 루프를 사용하는 것보다 낫고 읽기 쉽습니다.

다음 브라우저에서 지원됩니다.

  • Firefox (Gecko) : 4 (2.0)
  • 크롬 : 5
  • 인터넷 익스플로러 : 9

참조 모질라 개발자 네트워크 Object.keys () 의 참조 학습과 정보를.


7
이것은 더 광범위하게 지원됩니다 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Dom Vinyard

3
당신은 오래된 브라우저에 대한 지원이 필요한 경우, 당신이 사용할 수있는 polyfill
KyleMit

27
이 언어 구성을 지원하는 환경에서이 방법을 사용하면 Array.foreach를 다음과 같이 호출 할 수 있습니다. Object.keys(myObject).forEach(function(key,index) { //key = the name of the object key //index = the ordinal position of the key within the object });
Todd Price

4
@ AJ_83 forEach ()에서 벗어날 수있는 좋은 방법은 없습니다. 이 경우 some ()을 사용하고 중단하려면 true를 반환하십시오
.

11
이것이 왜 for-in보다 더 읽기 쉬운가? for candidate in candidateStatus... 나에게 읽을 수있는 것 같습니다
Jona

309

우리는 2019 년에 우리가 타이핑 할 시간이별로 없습니다 ... 그래서 멋진 새롭고 멋진 ECMAScript 2016을 해보십시오.

Object.keys(obj).forEach(e => console.log(`key=${e}  value=${obj[e]}`));

17
이것이 Danny R의 답변과 어떻게 다릅니 까?
krillgar

27
oneliner이며 forEach 대신 map을 사용합니다. 또한 console.log satement는 일부 사람들에게는 흥미로울 것입니다.
Frank Roth

Satly, 그것은 obj=window.performance.memory다음과 같은 경우 for in작동하지 않습니다. 즉,var obj = window.performance.memory; for( key in obj ) console.log( 'key=' + key + ' val=' + obj[key] );
Michaelangel007

2
window.performance.memory크롬에서만 지원되며 Object.keys(obj)빈 배열을 반환합니다. 이것은와 아무 관련이 없습니다 .map.
Frank Roth

누구나이 단일 라이너를 재구성하여 한 번에 여러 가지 작업을 수행하는 것을 원치 않는 e경우이 요점을 게시했습니다. 기본적으로 대부분의 해시 구현과 동일 하지만 ( (key) => (value) )대신에 사용 { key => value }하지만 이전에 처리하지 않았 으면 더 잘 시각화하는 데 도움이 될 수 있습니다. gist.github.com/the-nose-knows/9f06e745a56ff20519707433e28a4fa8
kayleeFrye_onDeck

216

그것은이다 for...in statement( MDN , ECMAScript를 사양 ).

"로 당신은 그것을 읽을 수 있습니다 위한 모든 재산 INobj 객체의 각 속성을 할당 PROPT의 차례로 변수".


1
고마워요, 지금 이해합니다. 나는 책과 구글을 통해 고개를 저었다.
Rafay

21
@RightSaidFred의 동의 in연산자와 for전혀 관련되지 않은 문장의 for-in문장은 그 자체 문법 생산을 나타냅니다 for ( LeftHandSideExpression in Expression ),for ( var VariableDeclarationNoIn in Expression )
CMS

2
이상한 대답은 너무 많은 표를 얻었습니다. 특히 인기있는 의견이 모순되는 것처럼 보입니다.
더그 몰 리노

9
왜 이것이 답변으로 표시됩니까? 이 글타래에서 가장 도움이되지 않을 것입니다 ..
computrius

3
가장 도움이되지 않는 답변? OP가 요구 한 바에 따라 다릅니다. 내가 처음이 변수가 객체의 속성을 검사하는 데 사용할 수있는 메커니즘, 그리고 어떤 약 당황 bemusement처럼 보였다 질문을 읽을 때 대답은 설득력을 설명합니다 ( '에 대한-에'에도 불구하고 잘못된). "왜 모든 속성을 제공합니까?"라는 질문에 OP가 hasOwnProperty를 찾고 있었지만이를 알지 못했지만 OP가 알고 싶었을 가능성 더 높았다 고 생각 합니다. 다른 질문에 대답하십시오. :-)
Bumpy

157

최신 ES 구현에서는 다음을 사용할 수 있습니다 Object.entries.

for (const [key, value] of Object.entries(obj)) { }

또는

Object.entries(obj).forEach(([key, value]) => ...)

값을 반복하려면 Object.values를 사용하십시오.

for (const value of Object.values(obj)) { }

또는

Object.values(obj).forEach(value => ...)

이것이 가장 좋은 해결책 (object.entries ...)이지만 사용할 수는 없습니다. 이 작업을 여러 번 수행하고 프레임 워크에서 지원할 수없는 경우이 페이지에서 polyfill을 사용할 수 있습니다. developer.mozilla.org/nl/docs/Web/JavaScript/Reference/…
Mario

세 번째 제안은 속성 값만 있으면 좋습니다. 대박!
Ginzburg


27

환경이 ES2017 을 지원하는 경우 Object.entries를 권장합니다 .

Object.entries(obj).forEach(([key, value]) => {
  console.log(`${key} ${value}`);
});

Mozillas Object.entries () 문서에 표시된대로 :

Object.entries () 메소드에 의해 제공되는 것과 동일한 순서로, 지정된 객체 자체 열거 속성 [키 값] 쌍 배열을 반환 용 루프 (차이가 존재한다는-용의 루프를 열거 프로토 타입 체인의 속성).

기본적으로 Object.entries를 사용하면 이전 for ... in 루프에 필요한 다음 추가 단계를 무시할 수 있습니다 .

// This step is not necessary with Object.entries
if (object.hasOwnProperty(property)) {
  // do stuff
}

22

jquery를 사용하면 다음과 같이 할 수 있습니다.

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

1
$.each({foo:1, length:0, bar:2}, function(k,v){console.log(k,v)})$ .each는 객체에 적합하지 않습니다 . 객체에 길이 속성이 있고 값이 0이면 전체 객체가 마치 빈 배열 인 것처럼 처리됩니다.
Bob Stein

이것이 왜 버그 초대 방식 이라고 생각하는지 자세히 설명 합니다.
Bob Stein

21

Dominik의 대답은 완벽합니다. 읽는 것이 더 깨끗하기 때문에 그렇게하는 것을 선호합니다.

for (var property in object) {
    if (!object.hasOwnProperty(property)) continue;

    // Do stuff...
}

Object대문자 o를 사용해야합니까 ?
조나단

18

위의 답변은 for 루프 내부에서 객체가 무엇인지 확인한 후에 설명하지 않기 때문에 약간 성가시다. 직접 액세스하지 마십시오! 실제로 OBJ에 적용해야하는 키만 제공됩니다.

var obj = {
  a: "foo",
  b: "bar",
  c: "foobar"
};

// We need to iterate the string keys (not the objects)
for(var someKey in obj)
{
  // We check if this key exists in the obj
  if (obj.hasOwnProperty(someKey))
  {
    // someKey is only the KEY (string)! Use it to get the obj:
    var myActualPropFromObj = obj[someKey]; // Since dynamic, use [] since the key isn't literally named "someKey"

    // NOW you can treat it like an obj
    var shouldBeBar = myActualPropFromObj.b;
  }
}

이것은 모두 ECMA5 안전합니다. Rhino와 같은 절름발이 JS 버전에서도 작동합니다.)


15

ES2015의 사용법을 추가하려면 Reflect.ownKeys(obj) 하고 반복자를 통해 속성을 반복합니다.

예를 들면 다음과 같습니다.

let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };

에 의해 반복 될 수있다

// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));

객체의 키 값을 직접 반복하려면 iterator 문자열, 배열, 유형 배열, Map 및 Set에 대한 JavaScipts의 기본 반복자와 마찬가지로을 .

JS는 기본 반복자 속성을 통해 반복을 시도하며 이는로 정의되어야합니다 Symbol.iterator.

모든 객체를 반복하려면 Object의 프로토 타입으로 추가 할 수 있습니다.

Object.prototype[Symbol.iterator] = function*() { 
    for(p of Reflect.ownKeys(this)){ yield this[p]; }
}

이를 통해 for ... of 루프를 사용하여 객체의 값을 반복 할 수 있습니다. 예를 들면 다음과 같습니다.

for(val of obj) { console.log('Value is:' + val ) }

주의 :이 답변 (2018 년 6 월)을 작성할 때 IE를 제외한 다른 모든 브라우저는 생성기 for...of를 통해 반복을 지원합니다.Symbol.iterator


실제로 OP의 질문에 대답하지는 않았지만 이것은 나에게 매우 도움이되었지만 아직 Reflect에 대해서는 몰랐습니다.
Michiel

15
if(Object.keys(obj).length) {
    Object.keys(obj).forEach(key => {
        console.log("\n" + key + ": " + obj[key]);
    });
}

// *** Explanation line by line ***

// Explaining the bellow line
// It checks if obj has at least one property. Here is how:
// Object.keys(obj) will return an array with all keys in obj
// If there is no keys in obj, it will return empty array = []
// Then it will get it's length, if it has at least one element,
// it's bigger than 0 which evaluates to true and the bellow 
// code will be executed.
// Else means it's length = 0 which evaluates to false
// NOTE: you can use Object.hasOwnProperty() instead of Object.keys(obj).length
if(Object.keys(obj).length) {

    // Explaining the bellow line
    // Just like in the previous line, this returns an array with
    // all keys in obj (because if code execution got here, it means 
    // obj has keys.) 
    // Then just invoke built-in javascript forEach() to loop
    // over each key in returned array and calls a call back function 
    // on each array element (key), using ES6 arrow function (=>)
    // Or you can just use a normal function ((key) { blah blah }).
    Object.keys(obj).forEach(key => {

        // The bellow line prints out all keys with their 
        // respective value in obj.
        // key comes from the returned array in Object.keys(obj)
        // obj[key] returns the value of key in obj
        console.log("\n" + key + ": " + obj[key]);
    });
}

3
안녕, 당신은 당신의 답변에 대한 더 많은 정보를 추가 할 수 있습니까, 코드 만 도움이되지 않습니다.
니콜라스

안녕하세요 @Nicolas 코드에 한 줄씩 설명을 추가했습니다. 아직 분명하지 않다 알려줘
푸 아드 Boukredine

forEach 빈 값을 건너 뛰기 때문에 if를 제거하고 Object.keys(obj).forEach(e => console.log(`key=${e} value=${obj[e]}`));Frank Roth의 대답처럼 할 수 있다고 생각합니다 .
Darkproduct

12

for ... in 루프는 for 루프와 비슷하기 때문에 객체의 각 속성을 나타냅니다. for ... in 루프에서 다음을 수행하여 propt를 정의했습니다.

    for(var propt in obj){
alert(propt + ': ' + obj[propt]);
}

for ... in 루프는 객체의 열거 가능한 속성을 반복합니다. for ... in 루프에 정의하거나 넣은 변수는 반복되는 다음 속성으로 갈 때마다 변경됩니다. for ... in 루프의 변수는 키를 반복하지만 그 값은 키 값입니다. 예를 들면 다음과 같습니다.

    for(var propt in obj) {
      console.log(propt);//logs name
      console.log(obj[propt]);//logs "Simon"
    }

변수가 변수 값과 어떻게 다른지 확인할 수 있습니다. 대조적으로, for ... of 루프는 반대입니다.

이게 도움이 되길 바란다.


11
let obj = {"a": 3, "b": 2, "6": "a"}

Object.keys(obj).map((item) => {console.log("item", obj[item])})

// a
// 3
// 2

1
다른 주석에서 언급했듯이 각 반복에서 코드 블록을 호출 한 결과로 새 배열을 반환하기 위해 forEach여기에서 더 적합합니다 map. 그러나 우리는 반환 값이 아닌 각 반복의 측면 영향에만 관심이 있으므로 새로운 배열이 필요하지 않습니다 map.
Danny


10

Lodash를 사용할 수 있습니다. 문서

var obj = {a: 1, b: 2, c: 3};
_.keys(obj).forEach(function (key) {
    ...
});

10
지구상에서 왜이 "답변"에 10 개의 공감대가 있습니까? 질문에 완전히 대답하지 못합니다. 나는 보통 JS 개발자의 지능에 대한 믿음을 잃기 시작했습니다.
developerbmw

1
@developerbmw ES6 기능을 사용하는 것이 더 낫다는 것을 이해하지만 1 년 전에 대답했습니다. 잠시 시간을내어 의견을 보내주십시오.
viktarpunko

1
아이디어는 사용자가 페이지에 10000 라인 라이브러리를 추가하도록 제안하는 대신 기본 메소드에 더 집중하는 것입니다. 오해하지 마십시오. Lodash를 사용하는 것을 좋아하지만 시간과 장소가 있으며 이것이 아닙니다.

9

귀하의 for루프는 객체의 모든 속성 반복한다 obj. proptfor 루프의 첫 번째 줄에 정의되어 있습니다. obj객체 의 속성 이름 인 문자열입니다 . 루프의 첫 번째 반복에서 propt"name"이됩니다.


9

JavaScript의 객체는 속성의 모음이므로 각 명령문마다 반복 될 수 있습니다.

obj핵심 가치 수집으로 생각해야합니다 .


! 이러한 '속성 목록'은 키로 이름을 가질 수 있고 일반적인 JS 배열은 키로 만 숫자를 가질 수 있다는 중요한 차이점이 있습니다.
Qqwy

9

요즘 Symbol.iterator 메소드를 추가하여 표준 JS 객체를 반복 가능한 객체로 변환 할 수 있습니다. 그런 다음 for of루프 를 사용하여 해당 값에 직접 액세스하거나 객체에서 스프레드 연산자를 사용할 수도 있습니다. 멋있는. 우리가 어떻게 만들 수 있는지 보자.

var o = {a:1,b:2,c:3},
    a = [];
o[Symbol.iterator] = function*(){
                       var ok = Object.keys(this);
                            i = 0;
                       while (i < ok.length) yield this[ok[i++]];
                     };
for (var value of o) console.log(value);
// or you can even do like
a = [...o];
console.log(a);


1
재미있는 방법입니다. function*발견해 주셔서 감사합니다 !
Benj

5

노드를 실행하는 경우 다음을 권장합니다.

Object.keys(obj).forEach((key, index) => {
    console.log(key);
});

5

최상위 답변이 정확하지만 대체 사용 사례는 다음과 같습니다. 즉 객체를 반복하고 결국 배열을 만들려는 경우입니다. .map대신에 사용forEach

const newObj = Object.keys(obj).map(el => {
    //ell will hold keys 
   // Getting the value of the keys should be as simple as obj[el]
})

4

또한 재귀 적 방법을 추가하십시오.

function iterate(obj) {
    // watch for objects we've already iterated so we won't end in endless cycle
    // for cases like var foo = {}; foo.bar = foo; iterate(foo);
    var walked = [];
    var stack = [{obj: obj, stack: ''}];
    while(stack.length > 0)
    {
        var item = stack.pop();
        var obj = item.obj;
        for (var property in obj) {
            if (obj.hasOwnProperty(property)) {
                if (typeof obj[property] == "object") {
                  // check if we haven't iterated through the reference yet
                  var alreadyFound = false;
                  for(var i = 0; i < walked.length; i++)
                  {
                    if (walked[i] === obj[property])
                    {
                      alreadyFound = true;
                      break;
                    }
                  }
                  // new object reference
                  if (!alreadyFound)
                  {
                    walked.push(obj[property]);
                    stack.push({obj: obj[property], stack: item.stack + '.' + property});
                  }
                }
                else
                {
                    console.log(item.stack + '.' + property + "=" + obj[property]);
                }
            }
        }
    }
}

용법:

iterate({ foo: "foo", bar: { foo: "foo"} }); 

1
@faiz-내 의견을 참조하십시오. 순환 참조가있는 트로프 객체를 반복해서 걸을 때 무한 루프에
빠지지 않도록 보호합니다.

3

for..in 루프가하는 것은 새로운 변수 (var someVariable)를 생성 한 다음 주어진 객체의 각 속성을이 새로운 변수 (someVariable)에 하나씩 저장한다는 것입니다. 따라서 {} 블록을 사용하면 반복 할 수 있습니다. 다음 예를 고려하십시오.

var obj = {
     name:'raman',
     hobby:'coding',
     planet:'earth'
     };

for(var someVariable in obj) {
  //do nothing..
}

console.log(someVariable); // outputs planet

단순함을 감안할 때 이것을지지합니다. 유스 케이스에서는 개체 값, NaN, null, undefined에 대해 객체의 모든 속성을 확인해야합니다 (그래프의 점이었고 이러한 값으로 인해 그래프가 그려지지 않았습니다). 이름 대신 값을 얻으려면 루프에서 수행하면 obj[someVariable]됩니다. 아마도 그것이 너무 많이 다운 된 이유는 재귀 적이 지 않기 때문입니다. 따라서 고도로 구조화 된 객체가 있다면 이것은 적절한 해결책이 아닙니다.
캐서린 오스본

@KatharineOsborne 또는 아마도 다음 구문이 약간 암호이기 때문입니다. "{} 블록을 사용하면 반복 할 수 있습니다." 코드는 텍스트 이상을 말합니다.
bvdb

3

여기서 나는 각 노드를 반복하고 의미있는 노드 이름을 만들고 있습니다. 당신이 알면 instanceOf Array와 instanceOf Object는 거의 같은 일을합니다 (내 응용 프로그램에서는 다른 논리를 제공하고 있습니다)

function iterate(obj,parent_node) {
    parent_node = parent_node || '';
    for (var property in obj) {
        if (obj.hasOwnProperty(property)) {
            var node = parent_node + "/" + property;
            if(obj[property] instanceof Array) {
                //console.log('array: ' + node + ":" + obj[property]);
                iterate(obj[property],node)
            } else if(obj[property] instanceof Object){
                //console.log('Object: ' + node + ":" + obj[property]);
                iterate(obj[property],node)
            }
            else {
                console.log(node + ":" + obj[property]);
            }
        }
    }
}

참고-나는 Ondrej Svejdar의 답변에서 영감을 얻었습니다. 그러나이 솔루션은 성능이 우수하고 모호하지 않습니다.


3

기본적으로 객체의 각 속성을 반복하려고합니다.

JSFiddle

var Dictionary = {
  If: {
    you: {
      can: '',
      make: ''
    },
    sense: ''
  },
  of: {
    the: {
      sentence: {
        it: '',
        worked: ''
      }
    }
  }
};

function Iterate(obj) {
  for (prop in obj) {
    if (obj.hasOwnProperty(prop) && isNaN(prop)) {
      console.log(prop + ': ' + obj[prop]);
      Iterate(obj[prop]);
    }
  }
}
Iterate(Dictionary);

obj(prop)<
-TypeError

@le_m 내 나쁜. 실수로 hasOwnProperty속성을 가져와야합니다. 지금 작동합니다.
HovyTech

2

Javascript와 다른 의도를 가질 수 있기 때문에 위의 답변에 추가하고 싶습니다. JSON 객체와 Javascript 객체는 서로 다르므로 위에서 제안한 솔루션을 사용하여 JSON 객체의 속성을 반복 한 다음 놀랄 수 있습니다.

다음과 같은 JSON 객체가 있다고 가정하십시오.

var example = {
    "prop1": "value1",
    "prop2": [ "value2_0", value2_1"],
    "prop3": {
         "prop3_1": "value3_1"
    }
}

'속성'을 반복하는 잘못된 방법 :

function recursivelyIterateProperties(jsonObject) {
    for (var prop in Object.keys(example)) {
        console.log(prop);
        recursivelyIterateProperties(jsonObject[prop]);
    }
}

당신이 콘솔 로깅 보는 놀랄 수도 0, 1등을 반복 할 때을의 속성을 통해 prop1prop2와의prop3_1 . 이러한 객체는 시퀀스이며 시퀀스의 인덱스는 Javascript에서 해당 객체의 속성입니다.

JSON 객체 속성을 반복적으로 반복하는 더 좋은 방법 은 해당 객체가 시퀀스인지 아닌지를 먼저 확인하는 것입니다.

function recursivelyIterateProperties(jsonObject) {
    for (var prop in Object.keys(example)) {
        console.log(prop);
        if (!(typeof(jsonObject[prop]) === 'string')
            && !(jsonObject[prop] instanceof Array)) {
                recursivelyIterateProperties(jsonObject[prop]);

            }

     }
}

1

허용 된 답변을 더 세분화하려면 객체를 a var object = Object.create(null)로 인스턴스화하면 object.hasOwnProperty(property)TypeError가 트리거됩니다. 따라서 안전을 위해 다음과 같이 프로토 타입에서 호출해야합니다.

for (var property in object) {
    if (Object.prototype.hasOwnProperty.call(object, property)) {
        // do stuff
    }
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.