Estoy buscando el tutorial for..in de la documentación de MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
El ejemplo itera sobre las propiedades del objeto e imprime todo. Estoy tratando de imprimir solo si el valor de la propiedad del objeto es 3. ¿Puede alguien ayudarme a entender dónde me estoy equivocando? Y también si es posible explicar.
const object = { a: 1, b: 2, c: 3 }; for (const property in object.c == 3) { console.log(`${property}: ${object[property]}`); }Los bucles for...in no pueden tener condiciones.¹ Tienes que implementar la condición como un if dentro del bucle:
for (const property in object) { if (object[property] === 3) { console.log(`${property}: ${object[property]}`); } } Supuse que desea cualquier propiedad con el valor 3 , no solo c (ya que no habría necesidad de un ciclo).
¹ " for...in loops no puede tener condiciones" Entonces, ¿por qué no obtuviste un error? Debido a que su código era sintácticamente correcto, simplemente no hizo lo que esperaba. 🙂
El for (const property in object.c == 3) se evalúa así:
Calcula el resultado de object.c == 3 . Ahora tenemos:
for (const property in true) // or `in false` Dado for...in solo funciona en objetos, convierta la primitiva booleana en un objeto booleano. Ahora tenemos:
for (const property in new Boolean(true)) // or `in new Boolean(false)` Dado que los objetos Boolean no tienen propiedades enumerables, el ciclo nunca hace nada.
Tienes que hacer cada tarea paso a paso. El bucle for in es para la iteración. Después de eso, usa un condicional if para verificar si la propiedad es igual a 3. Verifique el código a continuación:
const object = { a: 1, b: 2, c: 3 }; for (const property in object) { if(object[property]===3) console.log(`${property}: ${object[property]}`); }parece que quieres usar para y si al mismo tiempo.
Deberías probar esto:
const object = { a: 1, b: 2, c: 3 }; for (const property in object) { if(object[property]==3){ console.log(`${property}: ${object[property]}`); } }