> Faqs > Cómo usar el método includes() de los arrays Javascript sin verificar los tipos

Cómo usar el método includes() de los arrays Javascript sin verificar los tipos

Tengo un problema en javascript con el método includes de los arrays y los tipos de las variables que puede comprobar.

A la vista de este código:

itemIds.includes(itemId);

Si el array itemIds tiene enteros y itemId es una cadena, me da un falso negativo en la búsqueda del includes(). El problema es que a veces tengo cadenas y a veces enteros, porque a veces los ids son alfanuméricos. Quisiera que includes no comprobase los tipos. ¿es posible?

Respuestas

En vez de includes() usa find() de los arrays y así puedes hacer la comprobación que quieras e ignorar los tipos en la verificación de igualdad:

const foundItem = itemsIds.find(id => id == itemId);

if (foundItem !== undefined) {
  // El item fue encontrado
  console.log('Item encontrado:', foundItem);
} else {
  // El item no fue encontrado
  console.log('Item no encontrado');
}

find() recorre el array itemsIds hasta que encuentre un elemento con el id que buscas. Si encuentra una coincidencia, devuelve el elemento; si no lo encuentra, devuelve undefined.

Espero que te sirva!

Marcos
172 2 15 11

A ver, tal como haces el resultado que obtienes es el esperado, si fallan los tipos es lo que hay...

Así q si trabajas tal cual no hay manera que includes te funcione si los tipos no casan ya que includes realiza una comparación estricta (===), lo que significa que si los tipos no coinciden (por ejemplo, comparar un número con una cadena), la comparación fallará.

Una solución es asegurarte de que ambos, los valores dentro del array itemIds y itemId, sean convertidos al mismo tipo antes de hacer la comparación. Puedes hacerlo utilizando las clases String o Number, dependiendo del formato que prefieras convertir todos los valores.

Lo más normal es que quieras convertir todos los tipos a cadenas, ya que si intentas convertir todos los tipos a números fallará cuando haya alfanuméricos.

En este código alternativo se convierte todos los elementos del array y el itemId a cadenas:

itemIds.map(String).includes(String(itemId));

Ese código es equivalente a (por si lo ves más claro):

const arrayCadenas = itemIds.map(String);
const itemCadena = String(itemId);
arrayCadenas.includes(itemCadena);

Esa sería la solución. Otra idea sería usar el método find() de los arrays, que te permite escribir tus propias sentencias de comprobación de que existe el elemento que buscas, que pueden ser comprobando o sin comprobar los tipos.

Saludos!

Camila
680 29 46 6