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 여야합니다.
답변
사용 _.forOwn()
.
_.forOwn(obj, function(value, key) { } );
https://lodash.com/docs#forOwn
객체의 속성을 반복 할 때 일반적으로 수행해야하는 forOwn
checks를 참고하십시오 hasOwnProperty
. forIn
이 검사를 수행하지 않습니다.
답변
답변
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 );
원래 설명을 기반으로 한 방법입니다.
답변
아래 개체를 예로 들어 보겠습니다.
let obj = { property1: 'value 1', property2: 'value 2'};
먼저 obj의 모든 키를 가져옵니다.
let keys = Object.keys(obj) //it will return array of keys
그리고 그것을 통해 반복
keys.forEach(key => //your way)
그냥 모두 모아
Object.keys(obj).forEach(key=>{/*code here*/})
답변
ES6에서는 for..of
루프를 사용하여 객체의 값을 반복 할 수도 있습니다 . 그러나 JavaScript 개체의 경우에는 개체에서 @@ iterator 속성을 정의해야하므로 바로 사용할 수 없습니다. 이것은 다음과 같이 작동합니다.
for..of
루프는 (의 반복자 객체를 OBJ1 부르 자 “물체가 반복 될”묻는다. OBJ1 위에 루프 반복을 연속적으로 제공 반복자 객체에서 다음 () 메소드를 호출하고 각 반복의 값으로 리턴 값을 사용하여 루프의.- 반복기 객체는 obj1의 @@ iterator 속성 또는 Symbol.iterator 속성에 정의 된 함수를 호출하여 얻습니다. 이 함수는 직접 정의해야하며 반복기 객체를 반환해야합니다.
다음은 그 예입니다.
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
답변
lodash로이 작업을 수행해야하는 이유를 이해하면 도움이 될 것입니다. 객체에 키가 있는지 확인하려는 경우 lodash가 필요하지 않습니다.
myObject.options.hasOwnProperty('property');
값이 있는지 확인하려는 경우 다음을 사용할 수 있습니다. _.invert
_.invert(myObject.options)[value]