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

223
Vistas
¿Cómo busco una cadena "al revés"?

Tengo el siguiente código en Angular. Quiero poder encontrar "américa del norte" escribiendo "américa del norte". ¿Cómo puedo hacer eso?

 const getContinents = keys => [ 'africa', 'antarctica', 'asia', 'australia', 'europe', 'north america', 'south america' ].filter(e => e.indexOf(keys.toLowerCase()) > -1); const fakeContinentsRequest = keys => of(getContinents(keys)).pipe( tap(_ => console.log(`API CALL at ${new Date()}`)) ); fromEvent(document.getElementById('type-ahead'), 'keyup') .pipe( debounceTime(200), map((e: any) => e.target.value), distinctUntilChanged(), switchMap(fakeContinentsRequest), tap(c => (document.getElementById('output').innerText = c.join('\n'))) ) .subscribe();
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede split() ambas cadenas en espacios para obtener una matriz de cada palabra.

Luego podemos usar every() para verificar si input existe en search . De esta manera el 'orden' no es importante.

Combinando esto con find() para buscar el resultado coincidente en una matriz:

 const options = [ 'africa', 'antarctica', 'asia', 'australia', 'europe', 'north america', 'south america' ]; function findByWord(input) { let inputSplit = input.split(' '); return options.filter(o => o.split(' ').every(e => inputSplit.includes(e))); } const res = findByWord('america north'); console.log(res)

 [ "north america" ]
about 4 years ago · Juan Pablo Isaza Denunciar

0

La solución más simple es simplemente invertir las palabras que le han dado y asumir que todas las mayúsculas y minúsculas son correctas:

 const matchStr = "I Love PHP"; const searchStr = "PHP Love"; if (matchStr.includes(searchStr.split(" ").reverse().join(" "))) { console.log("Value matched: " + matchStr); }

Para implementar en su código actual, es un poco más molesto, pero puede agregar una condición OR a su línea de filter :

 .filter(e => (e.indexOf(keys.toLowerCase()) > -1) || (e.indexOf(keys.toLowerCase().split(" ").reverse().join(" ")) > -1));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Hice algo más dinámico, donde dividí la cadena de búsqueda y luego la recorrí dentro de un Array.filter() . Es posible que sea más fácil lograr esto usando una expresión regular. También agregué el requisito de que la búsqueda debe ignorar las palabras que tienen menos de dos caracteres, y también asigné las palabras clave en minúsculas para que no distingan entre mayúsculas y minúsculas.

 const continents = [ 'africa', 'antarctica', 'asia', 'australia', 'europe', 'north america', 'south america' ] const filterContinents = (searchStr, continents) => { const MIN_KEYWORD_LENGTH = 2; let keywordsArr = searchStr.split(' ') .filter((keyword) => keyword.length > MIN_KEYWORD_LENGTH) .map((keyword) => keyword.toLowerCase()); let hasKeywords = keywordsArr.length > 0; const filterByKeywords = (_contintent) => { for (const _keyword of keywordsArr) { if (!_contintent.includes(_keyword)) { return false } } return hasKeywords } return continents.filter(filterByKeywords); } let searchStr = 'eur'; console.log({searchStr}, filterContinents(searchStr, continents)); searchStr = 'eu ro pe'; console.log({searchStr}, filterContinents(searchStr, continents)); searchStr = 'America North'; console.log({searchStr}, filterContinents(searchStr, continents));

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