TransWikia.com

¿El acumulador de for ... in en Javascript no es un número? ¿Por qué debo usar parseInt() si quiero mostrar el valor de i+1?

Stack Overflow en español Asked on January 2, 2021

Estoy leyendo un array de objetos JSON con for ... in de Javascript. Y ocurre algo que me llama la atención. Yo quiero usar el índice (de base 0) para mostrar en qué fila estoy en la lectura, pero empezando por 1, no por 0. Entonces intento mostrar un suma de i + 1 dentro del bucle (quiero sumar para mostrar i+1 en pantalla, no se trata de modificar i). Pero el comportamiento es como si i fuese un string:

var mData=`[
   {
      "k1":"v1.1",
      "k2":"v1.2"
   },
   {
      "k1":"v2.1",
      "k2":"v2.2"
   },
   {
      "k1":"v3.1",
      "k2":"v3.2"
   }
]`;

var mJson=JSON.parse(mData);
for (i in mJson){
  console.log(`Data ${i+1}n`);
  console.log(`tk1: ${mJson[i].k1} ntk2: ${mJson[i].k2}`);
}

Como pueden ver, me muestra Data01, Data11, Data21.

Pero si uso parseInt() sí funciona:


var mData=`[
   {
      "k1":"v1.1",
      "k2":"v1.2"
   },
   {
      "k1":"v2.1",
      "k2":"v2.2"
   },
   {
      "k1":"v3.1",
      "k2":"v3.2"
   }
]`;

var mJson=JSON.parse(mData);
var x=0;
for (i in mJson){
  x=i;
  console.log(`Data ${parseInt(i)+1}n`);
  console.log(`tk1: ${mJson[i].k1} ntk2: ${mJson[i].k2}`);
}

Entonces, ¿i es un String u otro tipo de dato? ¿Por qué no es un entero siendo que es un contador? ¿Habría otra forma de hacer lo que quiero, **mostrar el valor de i más uno, OJO, sin modificar i en su valor?

One Answer

Entonces, ¿i es un String u otro tipo de dato?

Es un string.

¿Por qué no es un entero siendo que es un contador?

No es un contador. El uso de for...in es recorrer las propiedades de un objeto, así que en la variable i se guarda el nombre de la propiedad, de ahí su tipo string.

¿Habría otra forma de hacer lo que quiero, **mostrar el valor de i más uno, OJO, sin modificar i en su valor?

Sí, con un forEach()

var mData=`[
   {
      "k1":"v1.1",
      "k2":"v1.2"
   },
   {
      "k1":"v2.1",
      "k2":"v2.2"
   },
   {
      "k1":"v3.1",
      "k2":"v3.2"
   }
]`;

var mJson=JSON.parse(mData);

mJson.forEach((elemento,i)=>{

  console.log(`Data ${i+1}n`);
  console.log(`tk1: ${elemento.k1} ntk2: ${elemento.k2}`);

});

Referencia for in

Correct answer by Lobos on January 2, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP