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

117
Vistas
.find (predicado) devuelve una matriz en lugar de booleano

Tengo una matriz que contiene muchos sistemas de escritura:

 var SCRIPTS = [ { name: "Adlam", ranges: [[125184, 125259], [125264, 125274], [125278, 125280]], direction: "rtl", year: 1987, living: true, link: "https://en.wikipedia.org/wiki/Fula_alphabets#Adlam_alphabet" }, { name: "Han", ranges: [[11904, 11930], [11931, 12020], [12032, 12246], [12293, 12294], [12295, 12296], [12321, 12330], [12344, 12348], [13312, 19894], [19968, 40939], [63744, 64110], [64112, 64218], [131072, 173783], [173824, 177973], [177984, 178206], [178208, 183970], [183984, 191457], [194560, 195102]], direction: "ltr", year: -1100, living: true, link: "https://en.wikipedia.org/wiki/Chinese_characters" }, // and many more entries }

Mi tarea es averiguar a qué sistema de escritura pertenece un personaje:

 scriptOfSample("英", SCRIPTS) // han

Aquí está mi primer enfoque, que es una solución funcional.

 function scriptOfSample(a, scripts) { const codePoint = a.codePointAt(0) for (let language of scripts) { let isInRange = language.ranges.find(([from, to]) => from <= codePoint && codePoint <= to) if (isInRange) { return language.name } } return undefined }

Por curiosidad, he intentado usar un enfoque con el método .forEach() .

 function scriptOfSample(a, scripts) { const codePoint = a.codePointAt(0) scripts.forEach(({ranges, name}) => { let isInRange = ranges.find(([from, to]) => from <= codePoint && codePoint <= to) if (Array.isArray(isInRange)) { console.log("found one") return name } }) return undefined }

Sin embargo, en este caso isInRange no es un valor booleano sino que contiene el rango [from, to] en el que el predicado era verdadero.

Lo que me gustaria saber:

  1. ¿Por qué el método find() devuelve valores diferentes?
  2. ¿Qué puedo hacer (¿Cómo debo ajustar mi implementación) para verificar si el valor "está dentro del rango"?
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Los comentarios son correctos al decir que Array#find devuelve un elemento de la matriz o undefined . Como lo está llamando en ranges que es una matriz de matrices, obtiene una matriz de vuelta.

En su lugar, puede usar el método Array#some , que devuelve un boolean si se cumple la condición en cualquier elemento de la matriz:

 function scriptOfSample(a, scripts) { const codePoint = sample.codePointAt(0); if (codePoint == null) return undefined const system = scripts.find( (script) => script.ranges.some( ([from, to]) => from <= codePoint && codePoint <= to ) ); return system ? system.name : undefined }
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