Pregunta Iterar a través de las propiedades del objeto


var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    alert(propt + ': ' + obj[propt]);
}

¿Cómo funciona la variable? propt representar las propiedades del objeto? No es un método incorporado o propiedad. Entonces, ¿por qué aparece cada propiedad en el objeto?


1512
2017-11-29 14:30


origen


Respuestas:


La iteración sobre las propiedades requiere este adicional hasOwnProperty comprobar:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

Es necesario porque el prototipo de un objeto contiene propiedades adicionales para el objeto que son técnicamente parte del objeto. Estas propiedades adicionales se heredan de la clase de objeto base, pero aún son propiedades de object.

hasOwnProperty simplemente comprueba si esta es una propiedad específica de esta clase, y no heredada de la clase base.


2052
2018-05-24 12:38



A partir de JavaScript 1.8.5 puede usar Object.keys(obj) para obtener una matriz de propiedades definidas en el objeto en sí (las que devuelven verdadero para obj.hasOwnProperty(key))

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

Esto es mejor (y más legible) que usar un bucle for-in.

Es compatible con estos navegadores:

  • Firefox (Gecko): 4 (2.0)
  • Chrome: 5
  • Internet Explorer: 9

Ver la Red de Desarrolladores de Mozilla Object.keys ()referencia de s para más información.


773
2017-08-13 07:19



Es el for...in statement (MDN, Especificación ECMAScript)

Puedes leerlo como "PARA cada propiedad EN el obj objeto, asigne cada propiedad al PROP. variable a su vez ".


189
2017-11-29 14:32



Las niñas y los muchachos somos en 2017 y no tenemos mucho tiempo para escribir ... Así que vamos a hacer este nuevo y elegante ECMAScript 2016:

Object.keys(obj).forEach(e => console.log(`key=${e}  value=${obj[e]}`));

142
2017-11-22 08:47



En las próximas versiones de ES, puede usar Object.entries:

for (const [key, value] of Object.entries(obj)) { }

o

Object.entries(obj).forEach(([key, value]) => ...)

Si solo quiere iterar sobre los valores, entonces use Object.values:

for (const value of Object.values(obj)) { }

o

Object.values(obj).forEach(value => ...)

57
2017-09-13 06:41



Es solamente un for...in lazo. Revisa la documentación en Mozilla.


37
2017-11-29 14:33



jquery te permite hacer esto ahora:

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

20
2018-03-29 15:19



Las respuestas anteriores son un poco molestas porque no explican lo que haces dentro del ciclo for luego de asegurarte de que es un objeto: ¡NO ACCEDES DIRECTAMENTE! En realidad, solo le entregan la LLAVE que necesita para presentarla al OBJ:

var obj = {
  a: "foo",
  b: "bar",
  c: "foobar"
};

// We need to iterate the string keys (not the objects)
for(var someKey in obj)
{
  // We check if this key exists in the obj
  if (obj.hasOwnProperty(someKey))
  {
    // someKey is only the KEY (string)! Use it to get the obj:
    var myActualPropFromObj = obj[someKey]; // Since dynamic, use [] since the key isn't literally named "someKey"

    // NOW you can treat it like an obj
    var shouldBeBar = myActualPropFromObj.b;
  }
}

Esto es todo ECMA5 seguro. Incluso funciona en las versiones cojas de JS como Rhino;)


12
2017-10-28 05:39



Puedes usar Lodash. La documentación 

var obj = {a: 1, b: 2, c: 3};
_.keys(obj).forEach(function (key) {
    ...
});

11
2017-11-04 16:51