Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda