javascript - objetos - object.keys foreach
Bucle a través de las propiedades en el objeto JavaScript con Lodash (5)
En ES6, también es posible iterar sobre los valores de un objeto usando el ciclo for..of . Sin embargo, esto no funciona de inmediato para objetos JavaScript, ya que debe definir una propiedad @@ iterator en el objeto. Esto funciona de la siguiente manera:
- El ciclo
for..ofpide al "objeto que se iterará" (lo llamaremos obj1 para un objeto iterador. El ciclo itera sobre obj1 llamando sucesivamente al método next () en el objeto iterador proporcionado y utilizando el valor devuelto como valor para cada iteración del ciclo. - El objeto iterador se obtiene al invocar la función definida en la propiedad @@ iterator, o la propiedad Symbol.iterator, de obj1. Esta es la función que debe definir usted mismo, y debe devolver un objeto iterador
Aquí hay un ejemplo:
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)
};
}
};
}
};
Ahora podemos usar el bucle for..of :
for (val of obj1) {
console.log(val);
} // 5 hello
¿Es posible recorrer las propiedades en un objeto JavaScript? Por ejemplo, tengo un objeto JavaScript definido como este:
myObject.options = {
property1: ''value 1'',
property2: ''value 2''
};
Las propiedades se agregarán dinámicamente a este objeto. ¿Hay alguna manera de que simplemente revise y verifique si existe una propiedad? ¿Si es así, cómo?
Por su deseo declarado de "verificar si una propiedad existe", puede usar directamente lo que tiene Lo-Dash.
var exists = _.has(myObject, propertyNameToCheck);
Sí, puedes y lodash no es necesario ... es decir
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];
}
}
Editar : la respuesta aceptada ( _.forOwn() ) debería ser https://.com/a/21311045/528262
Sería útil entender por qué necesita hacer esto con lodash. Si solo desea comprobar si existe una clave en un objeto, no necesita lodash.
myObject.options.hasOwnProperty(''property'');
Si está buscando para ver si existe un valor, puede usar _.invert
_.invert(myObject.options)[value]
Use _.forOwn() .
_.forOwn(obj, function(value, key) { } );
Tenga en cuenta que forOwn comprueba hasOwnProperty , como normalmente debe hacer al pasar por encima de las propiedades de un objeto. forIn no hace este control.