이름을 모르는 경우 Javascript 객체의 속성에 어떻게 액세스합니까?
다음과 같은 자바 스크립트 객체가 있다고 가정 해보십시오.
var data = { foo: 'bar', baz: 'quux' };
속성 이름으로 속성에 액세스 할 수 있습니다.
var foo = data.foo;
var baz = data["baz"];
그러나 속성의 이름을 모르면 이러한 값을 얻을 수 있습니까? 이러한 속성의 정렬되지 않은 특성으로 인해 구분이 불가능합니까?
필자의 경우 함수가 일련의 이름 값 쌍을 수락해야하지만 상황이 변경 될 수있는 상황을 구체적으로 생각하고 있습니다.
지금 까지이 작업을 수행하는 방법에 대한 내 생각은 데이터와 함께 속성의 이름을 함수에 전달하는 것이지만 이것은 해킹처럼 느껴집니다. 가능하면 내성을 가지고 이것을 선호합니다.
다음과 같이 키를 반복 할 수 있습니다.
for (var key in data) {
console.log(key);
}
"이름"과 "값"이 기록됩니다.
더 복잡한 객체 유형 (원래 질문에서와 같이 일반 해시와 유사한 객체가 아닌)이있는 경우 객체 프로토 타입 의 키가 아닌 객체 자체에 속한 키만 반복하려고합니다 .
for (var key in data) {
if (data.hasOwnProperty(key)) {
console.log(key);
}
}
언급했듯이 키는 특정 순서로 보장되지 않습니다. 다음과 다른 점에 유의하십시오.
for each (var value in data) {
console.log(value);
}
이 예제는 값을 반복하므로 log Property Name
및 0
입니다. 주의 :이 for each
구문은 Firefox에서만 지원되지만 다른 브라우저에서는 지원되지 않습니다.
대상 브라우저가 ES5를 지원하거나 사이트에 포함 된 es5-shim.js
(권장) 다음을 사용할 수도 있습니다 Object.keys
.
var data = { Name: 'Property Name', Value: '0' };
console.log(Object.keys(data)); // => ["Name", "Value"]
Object.keys(data).forEach(function (key) {
console.log(data[key]);
});
// => Logs "Property Name", 0
이전 버전의 JavaScript (<ES5)는 for..in
루프를 사용해야 합니다.
for (var key in data) {
if (data.hasOwnProperty(key)) {
// do something with key
}
}
ES5는 Object.keys 와 Array # forEach 를 도입 하여 조금 더 쉽게 만들었습니다.
var data = { foo: 'bar', baz: 'quux' };
Object.keys(data); // ['foo', 'baz']
Object.keys(data).map(function(key){ return data[key] }) // ['bar', 'quux']
Object.keys(data).forEach(function (key) {
// do something with data[key]
});
ES2017은 소개 Object.values
하고 Object.entries
.
Object.values(data) // ['bar', 'quux']
Object.entries(data) // [['foo', 'bar'], ['baz', 'quux']]
for(var property in data) {
alert(property);
}
공유 프로토 타입 방법과 속성을 모두 사용하지 않고 객체 인스턴스의 특정 속성 을 검사하려는 경우가 종종 있습니다.
Obj.prototype.toString= function(){
var A= [];
for(var p in this){
if(this.hasOwnProperty(p)){
A[A.length]= p+'='+this[p];
}
}
return A.join(', ');
}
function getDetailedObject(inputObject) {
var detailedObject = {}, properties;
do {
properties = Object.getOwnPropertyNames( inputObject );
for (var o in properties) {
detailedObject[properties[o]] = inputObject[properties[o]];
}
} while ( inputObject = Object.getPrototypeOf( inputObject ) );
return detailedObject;
}
그러면 새 객체에서 모든 속성과 해당 값 (상속되거나 자체, 열거 가능 또는 불허)을 가져옵니다. 원본 객체는 그대로 유지됩니다. 이제 새 객체를 사용하여 이송 할 수 있습니다.
var obj = { 'b': '4' }; //example object
var detailedObject = getDetailedObject(obj);
for(var o in detailedObject) {
console.log('key: ' + o + ' value: ' + detailedObject[o]);
}
var obj = {
a: [1, 3, 4],
b: 2,
c: ['hi', 'there']
}
for(let r in obj){ //for in loop iterates all properties in an object
console.log(r) ; //print all properties in sequence
console.log(obj[r]);//print all properties values
}
var fs = require("fs");
fs.stat( process.argv[1], function( err, stats ){
if (err) {
console.log( err.message );
return;
} else {
console.log(JSON.stringify(stats));
/* this is the answer here */
for (var key in Object.keys(stats)){
var t = Object.keys( stats )[key];
console.log( t + " value =: " + stats[t] );
}
/* to here, run in node */
}
});
var attr, object_information='';
for(attr in object){
//Get names and values of propertys with style (name : value)
object_information += attr + ' : ' + object[attr] + '\n';
}
alert(object_information); //Show all Object
'Programing' 카테고리의 다른 글
쿠키를 서버 측에서 삭제하는 올바른 방법 (0) | 2020.07.17 |
---|---|
현재로드 된 어셈블리를 어떻게 반복합니까? (0) | 2020.07.17 |
CSS에서 이미지 위에 텍스트를 배치하는 방법 (0) | 2020.07.17 |
C #의 정수 나누기가 왜 실수가 아닌 정수를 반환합니까? (0) | 2020.07.17 |
메모리 누수가 얼마나 멀리 갈 수 있습니까? (0) | 2020.07.17 |