Pregunta

Digamos que tienes un objeto javascript como este:

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

Puede acceder a las propiedades por el nombre de la propiedad:

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

Pero, ¿es posible obtener estos valores si no se conoce el nombre de las propiedades?¿La naturaleza desordenada de estas propiedades hace imposible distinguirlas?

En mi caso, estoy pensando específicamente en una situación en la que una función necesita aceptar una serie de pares nombre-valor, pero los nombres de las propiedades pueden cambiar.

Mi idea sobre cómo hacer esto hasta ahora es pasar los nombres de las propiedades a la función junto con los datos, pero esto parece un truco.Preferiría hacer esto con introspección si es posible.

¿Fue útil?

Solución 2

Las versiones antiguas de JavaScript (<ES5) requieren el uso de un for..in bucle:

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

ES5 presenta Claves.de.objeto y Matriz#paraCada lo que hace esto un poco más fácil:

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 presenta Object.values y Object.entries.

Object.values(data) // ['bar', 'quux']
Object.entries(data) // [['foo', 'bar'], ['baz', 'quux']]

Otros consejos

Puede recorrer claves como esta:

for (var key in data) {
  console.log(key);
}

Esto registra "Nombre" y "Valor".

Si tiene un tipo de objeto más complejo (no solo un objeto simple tipo hash, como en la pregunta original), solo querrá recorrer las claves que pertenecen al objeto en sí, a diferencia de las claves del objeto. prototipo:

for (var key in data) {
  if (data.hasOwnProperty(key)) {
    console.log(key);
  }
}

Como notó, no se garantiza que las claves estén en ningún orden en particular.Tenga en cuenta en qué se diferencia esto de lo siguiente:

for each (var value in data) {
  console.log(value);
}

Este ejemplo recorre los valores, por lo que registraría Property Name y 0.NÓTESE BIEN.:El for each La sintaxis en su mayor parte solo es compatible con Firefox, pero no con otros navegadores.

Si los navegadores de destino son compatibles con ES5 o su sitio incluye es5-shim.js (recomendado), también puedes usar Object.keys:

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

y bucle con Array.prototype.forEach:

Object.keys(data).forEach(function (key) {
  console.log(data[key]);
});
// => Logs "Property Name", 0
for(var property in data) {
    alert(property);
}

A menudo se tendrá que examinar los particulares propiedades de una instancia de un objeto, sin todo se comparte métodos de prototipo y propiedades:

 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;
}

Esto hará que todas las propiedades y sus valores (heredadas o poseer, o no numerable) en un nuevo objeto. objeto original es intacto. Ahora nuevo objeto puede ser atravesada mediante

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top