문제

다음과 같은 JavaScript 객체가 있다고 가정합니다.

var data = { foo: 'bar', baz: 'quux' };

속성 이름으로 속성에 액세스 할 수 있습니다.

var foo = data.foo;
var baz = data["baz"];

그러나 속성의 이름을 모르는 경우 이러한 값을 얻을 수 있습니까? 이 속성의 정렬되지 않은 특성이 그들에게 구별되는 것을 불가능하게 만드는가?

제 경우에는 기능이 일련의 이름 값 쌍을 수락해야하지만 속성의 이름이 변경 될 수있는 상황에 대해 구체적으로 생각하고 있습니다.

지금 까지이 작업을 수행하는 방법에 대한 나의 생각은 속성의 이름을 데이터와 함께 함수에 전달하는 것이지만 이것은 해킹처럼 느껴집니다. 가능하면 내성으로 이것을하는 것을 선호합니다.

도움이 되었습니까?

해결책 2

이전 버전의 JavaScript (<es5)는 for..in 고리:

for (var key in data) {
  if (data.hasOwnProperty(key)) {
    // do something with key
  }
}

ES5가 소개됩니다 객체 .keys 그리고 배열#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 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);
}

이 예제는 값을 통해 반복되므로 로그 Property Name 그리고 0. NB : for each 구문은 대부분 Firefox에서만 지원되지만 다른 브라우저에서는 지원되지 않습니다.

대상 브라우저가 ES5를 지원하거나 사이트가 포함 된 경우 es5-shim.js (권장), 당신은 또한 사용할 수 있습니다 Object.keys:

var data = { Name: 'Property Name', Value: '0' };
console.log(Object.keys(data)); // => ["Name", "Value"]

그리고 루프 Array.prototype.forEach:

Object.keys(data).forEach(function (key) {
  console.log(data[key]);
});
// => Logs "Property Name", 0
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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top