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..of
pide 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.