Tengo un objeto en JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Quiero usar un for
bucle para obtener sus propiedades. Y quiero iterarlo en partes (no todas las propiedades del objeto a la vez).
Con una matriz simple, puedo hacerlo con un for
bucle estándar :
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
¿Pero cómo hacerlo con objetos?
Respuestas:
Para la mayoría de los objetos, use
for .. in
:Con ES6, si necesita claves y valores simultáneamente, haga
Para evitar el registro de propiedades heredadas, verifique con hasOwnProperty :
No necesita verificar
hasOwnProperty
al iterar las teclas si está usando un objeto simple (por ejemplo, uno con el que se hizo{}
).Esta documentación de MDN explica de manera más general cómo tratar con objetos y sus propiedades.
Si desea hacerlo "en trozos", lo mejor es extraer las claves en una matriz. Como el pedido no está garantizado, esta es la forma correcta. En los navegadores modernos, puede usar
Para ser más compatible, será mejor que hagas esto:
Luego puede iterar en sus propiedades por índice
yourobject[keys[i]]
:fuente
keys
del código dado debería ser suficiente.Aquí hay otra solución de iteración para los navegadores modernos:
O sin la función de filtro:
Sin embargo, debe tener en cuenta que las propiedades en el objeto JavaScript no están ordenadas, es decir, no tienen orden.
fuente
Usando
Object.entries
haces algo como esto.El método Object.entries () devuelve una matriz de la propiedad enumerable de un objeto dado [clave, valor]
Por lo tanto, puede iterar sobre el Objeto y tener
key
yvalue
para cada objeto y obtener algo como esto.o así
Para una referencia, eche un vistazo a los documentos MDN para entradas de objeto
fuente
Con las nuevas características ES6 / ES2015, ya no tiene que usar un objeto para iterar sobre un hash. Puedes usar un mapa . Javascript Maps mantiene las claves en orden de inserción, lo que significa que puede iterar sobre ellas sin tener que verificar hasOwnProperty, que siempre fue realmente un truco.
Iterar sobre un mapa:
o usar para cada:
fuente
Si desea la clave y el valor al iterar, puede usar un bucle for ... of con Object.entries .
fuente
La única forma confiable de hacer esto sería guardar sus datos de objeto en 2 matrices, una de claves y otra para los datos:
Luego puede iterar sobre las matrices como lo haría normalmente:
No estoy usando
Object.keys(obj)
, porque eso es IE 9+.fuente
-> si iteramos sobre un objeto JavaScript usando y encontramos la clave de la matriz de objetos
fuente
Si desea iterar todo el objeto a la vez, puede usar el
for in
bucle:Pero si quieres dividir el objeto en partes, de hecho no puedes. No hay garantía de que las propiedades en el objeto estén en un orden específico. Por lo tanto, puedo pensar en dos soluciones.
El primero de ellos es "eliminar" las propiedades ya leídas:
Otra solución que se me ocurre es usar Array of Arrays en lugar del objeto:
Entonces, el
for
bucle estándar funcionará.fuente
Finalmente se me ocurrió una útil función de utilidad con una interfaz unificada para iterar objetos, cadenas, matrices, matrices escritas, mapas, conjuntos (cualquier Iterables).
https://github.com/alrik/iterate-javascript
fuente
Puede intentar usar lodash: una moderna biblioteca de utilidad de JavaScript que ofrece modularidad, rendimiento y extras js para iterar objetos rápidamente:
fuente
Para la iteración de objetos usualmente usamos un
for..in
bucle. Esta estructura recorrerá todas las propiedades enumerables , incluidas las que se heredan mediante herencia prototípica. Por ejemplo:Sin embargo,
for..in
recorrerá todos los elementos enumerables y esto no nos permitirá dividir la iteración en fragmentos. Para lograr esto, podemos usar laObject.keys()
función integrada para recuperar todas las claves de un objeto en una matriz. Luego podemos dividir la iteración en múltiples bucles for y acceder a las propiedades usando la matriz de claves. Por ejemplo:fuente
fuente
Object
s están en orden. Ellos no están.If you can make sense of the sentence it worked
solo funciona debido a los detalles de implementación. No se garantiza que funcione en absoluto. Además, no debe TitleCase sus funciones y variables. Eso es paraclass
es.Realmente un PITA, esto no es parte del Javascript estándar.
Nota: Cambié los parámetros de devolución de llamada a (valor, clave) y agregué un tercer objeto para que la API sea coherente con otras API.
Úselo así
fuente
this
lo que quiera para la devolución de llamada, ya que la devolución de llamada tiene su propio contexto.objectForEach
función real . Lo siento si eso fue confuso.Si. Puede recorrer un objeto usando for loop. Aquí hay un ejemplo
NOTA: el ejemplo mencionado anteriormente solo funcionará en IE9 +. Consulte el soporte del navegador Objec.keys aquí .
fuente
Probar en línea
fuente