Tengo un objeto en JavaScript:
{ abc: '...', bca: '...', zzz: '...', xxx: '...', ccc: '...', // ... } Quiero usar un bucle for 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 bucle for estándar:
for (i = 0; i < 100; i++) { ... } // first part for (i = 100; i < 300; i++) { ... } // second for (i = 300; i < arr.length; i++) { ... } // lastPero, ¿cómo hacerlo con objetos?
Para iterar en claves de Arrays, Strings u Objects , use for .. in :
for (let key in yourobject) { console.log(key, yourobject[key]); }Con ES6, si necesita claves y valores simultáneamente, haga
for (let [key, value] of Object.entries(yourobject)) { console.log(key, value); }Para evitar registrar propiedades heredadas, verifique con hasOwnProperty :
for (let key in yourobject) { if (yourobject.hasOwnProperty(key)) { console.log(key, yourobject[key]); } } No necesita verificar hasOwnProperty al iterar las claves si está usando un objeto simple (por ejemplo, uno que hizo usted mismo con {} ).
Esta documentación de MDN explica de manera más general cómo tratar con objetos y sus propiedades.
Si quieres hacerlo "en trozos", lo mejor es extraer las claves en una matriz. Como el orden no está garantizado, esta es la forma correcta. En los navegadores modernos, puede usar
let keys = Object.keys(yourobject);Para ser más compatible, será mejor que hagas esto:
let keys = []; for (let key in yourobject) { if (yourobject.hasOwnProperty(key)) keys.push(key); } Luego puede iterar en sus propiedades por índice: yourobject[keys[i]] :
for (let i=300; i < keys.length && i < 600; i++) { console.log(keys[i], yourobject[keys[i]]); }Aquí hay otra solución de iteración para navegadores modernos:
Object.keys(obj) .filter((k, i) => i >= 100 && i < 300) .forEach(k => console.log(obj[k]));O sin la función de filtro:
Object.keys(obj).forEach((k, i) => { if (i >= 100 && i < 300) { console.log(obj[k]); } });Sin embargo, debe tener en cuenta que las propiedades en el objeto de JavaScript no están ordenadas, es decir, no tienen ningún orden.
Usando Object.entries , haces algo como esto.
// array like object with random key ordering const anObj = { 100: 'a', 2: 'b', 7: 'c' }; console.log(Object.entries(anObj)); // [ ['2', 'b'],['7', 'c'],['100', 'a'] ]El método Object.entries() devuelve una matriz de la propiedad enumerable propia de un objeto dado [clave, valor]
Entonces puede iterar sobre el Objeto y tener key y value para cada uno de los objetos y obtener algo como esto.
const anObj = { 100: 'a', 2: 'b', 7: 'c' }; Object.entries(anObj).map(obj => { const key = obj[0]; const value = obj[1]; // do whatever you want with those values. });o así
// Or, using array extras Object.entries(obj).forEach(([key, value]) => { console.log(`${key} ${value}`); // "a 5", "b 7", "c 9" });Para obtener una referencia, consulte los documentos de MDN para entradas de objetos