JavaScript 객체의 속성을 반복 할 수 있습니까? 예를 들어 다음과 같이 정의 된 JavaScript 개체가 있습니다.
myObject.options = {
property1: 'value 1',
property2: 'value 2'
};
속성은이 개체에 동적으로 추가됩니다. 속성이 존재하는지 확인하고 반복하는 방법이 있습니까? 그렇다면 어떻게?
JavaScript 객체의 속성을 반복 할 수 있습니까? 예를 들어 다음과 같이 정의 된 JavaScript 개체가 있습니다.
myObject.options = {
property1: 'value 1',
property2: 'value 2'
};
속성은이 개체에 동적으로 추가됩니다. 속성이 존재하는지 확인하고 반복하는 방법이 있습니까? 그렇다면 어떻게?
답변:
예, 할 수 있으며 lodash는 필요하지 않습니다.
for (var key in myObject.options) {
// check also if property is not inherited from prototype
if (myObject.options.hasOwnProperty(key)) {
var value = myObject.options[key];
}
}
편집 : 수락 된 답변 ( _.forOwn () )은 https://stackoverflow.com/a/21311045/528262 여야합니다.
lodash
하지 이것은 단지 성가신 필요하지 않음으로써 정당화 hasOwnProperty
체크
사용 _.forOwn()
.
_.forOwn(obj, function(value, key) { } );
https://lodash.com/docs#forOwn
객체의 속성을 반복 할 때 일반적으로 수행해야하는 forOwn
checks를 참고하십시오 hasOwnProperty
. forIn
이 검사를 수행하지 않습니다.
key
번째 PARAM이지만 의미가
stecb가 보여준 것처럼 바닐라 JS로 확실히 할 수 있지만 each
lodash로 수행하는 방법에 관한 핵심 질문에 대한 최고의 답변 이라고 생각 합니다.
_.each( myObject.options, ( val, key ) => {
console.log( key, val );
} );
언급 한 JohnnyHK와 같이 has
사용 사례에 도움이되는 방법 도 있지만 원래 언급 된 set
방법이 더 유용 할 수 있습니다. 앞서 언급 한대로이 객체에 동적으로 무언가를 추가하고 싶다고 가정 해 보겠습니다.
let dynamicKey = 'someCrazyProperty';
let dynamicValue = 'someCrazyValue';
_.set( myObject.options, dynamicKey, dynamicValue );
원래 설명을 기반으로 한 방법입니다.
ES6에서는 for..of
루프를 사용하여 객체의 값을 반복 할 수도 있습니다 . 그러나 JavaScript 개체의 경우에는 개체에서 @@ iterator 속성을 정의해야하므로 바로 사용할 수 없습니다. 이것은 다음과 같이 작동합니다.
for..of
루프는 (의 반복자 객체를 OBJ1 부르 자 "물체가 반복 될"묻는다. OBJ1 위에 루프 반복을 연속적으로 제공 반복자 객체에서 다음 () 메소드를 호출하고 각 반복의 값으로 리턴 값을 사용하여 루프의.다음은 그 예입니다.
const obj1 = {
a: 5,
b: "hello",
[Symbol.iterator]: function() {
const thisObj = this;
let index = 0;
return {
next() {
let keys = Object.keys(thisObj);
return {
value: thisObj[keys[index++]],
done: (index > keys.length)
};
}
};
}
};
이제 for..of
루프를 사용할 수 있습니다 .
for (val of obj1) {
console.log(val);
} // 5 hello