Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
array.includes no funciona al verificar si existe un iterador en la matriz

Estoy encontrando un comportamiento inesperado en mi código JavaScript que me gustaría entender. Quiero una función de una línea para detectar si existe un número dentro de una matriz de enteros. El número que se verifica es el iterador de un ciclo en otra matriz. Estoy usando la función include( includes() estándar, debería tener en cuenta que sucede lo mismo con un indexOf() >= 0 . Para esta prueba tenemos el siguiente código:

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for(let i in array1) console.log(array2.includes(i));

Para mi sorpresa, cada salida devuelve false en lugar de la secuencia false true true false esperada. ¿Cómo puede ser esto? Sé que estoy comprobando i no arr[i] i pero todavía corresponde a los números incluidos en esas matrices: 0 sigue siendo 0, 1 sigue siendo 1, etc. Usar arr.includes(1) devuelve verdadero, así que ¿por qué? no arr.includes(i) cuando i también es 1?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Un for...in recorre todas las claves/propiedades.

Es una cadena, no un número, que proviene de la propiedad de soporte de acceso.

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for(let i in array1) console.log(typeof i, i, array2.includes(i));

Un for...of recorre los valores si el objeto es iterable, definido por alguna función que no conozco y que no es importante en este momento.

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for(let i of array1) console.log(typeof i, i, array2.includes(i));

También sepa que su bucle for...in no hace lo que parece esperar que haga cuando array1 no es una lista de enteros crecientes que comienza en 0:

 const array1 = [6, 4, 3, 95, 45, 3, 3]; for(let i in array1) console.log(typeof i, i);

Entonces, lo que debe hacer es usar for...of (o Array.prototype.forEach , o un bucle tradicional for (let i = 0; i < arr.length; i++) , etc.) a menos que necesite un for...in (que casi nunca), o en este caso, supongo que puede convertir la cadena en un número antes de verificar si se llama en Array.prototype.includes

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for(let i in array1) console.log(i, array2.includes(parseInt(i)));

about 4 years ago · Juan Pablo Isaza Denunciar

0

for...in recorre todas las propiedades, no los valores. Las matrices son objetos y sus propiedades son 0 ... array.length , por lo que i dentro del ciclo for es 1 , 2 , 3 y 4 .

Deberías estar usando un bucle for...of en su lugar:

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for(let i of array1) console.log(array2.includes(i));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Debe usar for..of con arreglos y for..in con objetos

La instrucción for...of crea un bucle iterando sobre objetos iterables, incluidos: String integrado, Array, objetos similares a matrices (por ejemplo, argumentos o NodeList), TypedArray, Map, Set y iterables definidos por el usuario. Invoca un enlace de iteración personalizado con declaraciones que se ejecutarán para el valor de cada propiedad distinta del objeto. - MDN

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; for (let i of array1) console.log(array2.includes(i));

Opciones alternativas

También puede usar forEach aquí para lograr exactamente el mismo resultado:

 const array1 = [0, 1, 2, 3]; const array2 = [1, 2]; array1.forEach((val) => console.log(array2.includes(val)));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda