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

194
Vistas
cómo acortar esta función JS

Tengo esta función Js con parámetros de filtro codificados. Filtra todos los subobjetos de cubos cuando la clave comienza con una cadena de una lista determinada. Por ahora no he encontrado una manera de poner esta lista como una matriz...

 function filter(buckets) { return buckets.filter(({key}) => { const _key = key.toLowerCase(); return ( !_key.startsWith("anciennes") && !_key.startsWith("anciens") && !_key.startsWith("arrondissements") && !_key.startsWith("autorites") && !_key.startsWith("cantons") && !_key.startsWith("capitales") && !_key.startsWith("chaines") && !_key.startsWith("chefs lieux") && !_key.startsWith("circonscriptions") && !_key.startsWith("communautes d") && !_key.startsWith("comtes d") && !_key.startsWith("constellations") && !_key.startsWith("continents") && !_key.startsWith("cours d") && !_key.startsWith("départements") && !_key.startsWith("districts d") && !_key.startsWith("établissements") && !_key.startsWith("états") && !_key.startsWith("ethnonymes") && !_key.startsWith("étoiles") && !_key.startsWith("europe") && !_key.startsWith("îles") && !_key.startsWith("lander-allemands") && !_key.startsWith("lieux-mythologiques") && !_key.startsWith("Localités d") && !_key.startsWith("mers") && !_key.startsWith("montagnes") && !_key.startsWith("municipalité") && !_key.startsWith("fromage") && !_key.startsWith("localités") && !_key.startsWith("noms de") && !_key.startsWith("numéros de") && !_key.startsWith("odonymes") && !_key.startsWith("organisations internationales") && !_key.startsWith("pays ") && !_key.startsWith("péninsules") && !_key.startsWith("préfectures") && !_key.startsWith("provinces") && !_key.startsWith("quartiers") && !_key.startsWith("régions") && !_key.startsWith("réserves indiennes") && !_key.startsWith("sous ") && !_key.startsWith("territoires") && !_key.startsWith("toponymes ") && !_key.startsWith("unions supranationales") && !_key.startsWith("villes du quebec") && !_key.startsWith("voivodies de pologne") ) }) } const buckets = [ {"key": "Aliments", "doc_count": 10}, {"key": "Adjectifs", "doc_count": 7}, {"key": "Vêtements", "doc_count": 6}, {"key": "Armures", "doc_count": 5}, {"key": "Anciennes divisions géographiques", "doc_count": 4}, {"key": "Super-règnes", "doc_count": 4}, {"key": "Eucaryotes", "doc_count": 3}, {"key": "Pays", "doc_count": 3}, {"key": "Antonomases", "doc_count": 2}, {"key": "Continents", "doc_count": 2}, {"key": "Europe", "doc_count": 2}, {"key": "France", "doc_count": 2}, {"key": "Localités", "doc_count": 2}, {"key": "Localités de France", "doc_count": 2}, {"key": "Plantes", "doc_count": 2}, {"key": "États", "doc_count": 2}, {"key": "Acaryotes", "doc_count": 1}, {"key": "Animaux", "doc_count": 1}, {"key": "Armes", "doc_count": 1}, {"key": "Aromates", "doc_count": 1}, {"key": "Chordés", "doc_count": 1}, {"key": "Couleurs", "doc_count": 1}, {"key": "Créatures mythologiques", "doc_count": 1}, {"key": "Fromages", "doc_count": 1}, {"key": "Fromages forts", "doc_count": 1}, {"key": "Fromages à pâte filée", "doc_count": 1}, {"key": "Fruits", "doc_count": 1}, {"key": "Langages informatiques", "doc_count": 1}, {"key": "Localités du département de la Corrèze", "doc_count": 1}, {"key": "Localités du département de la Dordogne", "doc_count": 1}, {"key": "Machines", "doc_count": 1}, {"key": "Oiseaux", "doc_count": 1}, {"key": "Tétrapodes", "doc_count": 1}, {"key": "Vertébrés", "doc_count": 1}, {"key": "Vie domestique", "doc_count": 1}, {"key": "Virus", "doc_count": 1}, {"key": "Volcans", "doc_count": 1} ];

jsbin aquí:

https://jsbin.com/xicejozafe/edit?js,consola

cómo transformar esta función para generar !_key.startsWith( ... ) && a partir de una matriz de cadenas en lugar de este loco && largo codificado

 const listOfTermToIgnore = ["anciennes", "anciens", "arrondissements", "autorites", "cantons", "capitales", "chaines", "chefs lieux", "circonscriptions", "communautes d", "comtes d", "constellations", "continents", "cours d", "départements", "districts d", "établissements", "états", "ethnonymes", "étoiles", "europe", "îles", "lander-allemands", "lieux-mythologiques", "Localités d", "mers", "montagnes", "municipalité", "fromage", "localités", "noms de", "numéros de", "odonymes", "organisations internationales", "pays ", "péninsules", "préfectures", "provinces", "quartiers", "régions", "réserves indiennes", "sous ", "territoires", "toponymes ", "unions supranationales", "villes du quebec", "voivodies de pologne" ]

gracias por leer

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

Use array.every() para verificar todos los elementos de la matriz.

 function filter(buckets) { return buckets.filter(({key}) => { const _key = key.toLowerCase(); return listOfTtermToIgnore.every(term => !_key.startsWith(term)) } });
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar el inverso de array.some. Devolverá false si _key comienza con cualquier elemento de la matriz, o true en caso contrario.

 function filter(buckets) { return buckets.filter(({key}) => { const _key = key.toLowerCase(); return !listOfTermToIgnore.some(item => _key.startsWith(item)) }) }
over 4 years ago · Santiago Trujillo Denunciar

0

Por el costo único de crear una expresión regular, obtiene la siguiente solución de alto rendimiento:

 function quotemeta(s) { return String(s).replace(/\W/g, "\\$&"); } const listOfTermToIgnore = [ "anciennes", "anciens", "arrondissements", "autorites", "cantons", "capitales", "chaines", "chefs lieux", "circonscriptions", "communautes d", "comtes d", "constellations", "continents", "cours d", "départements", "districts d", "établissements", "états", "ethnonymes", "étoiles", "europe", "îles", "lander-allemands", "lieux-mythologiques", "mers", "montagnes", "municipalité", "fromage", "localités", "noms de", "numéros de", "odonymes", "organisations internationales", "pays ", "péninsules", "préfectures", "provinces", "quartiers", "régions", "réserves indiennes", "sous ", "territoires", "toponymes ", "unions supranationales", "villes du quebec", "voivodies de pologne" ]; const filter_re = new RegExp( "^(?:" + listOfTermToIgnore.map( _ => quotemeta(_) ).join("|") + ")" ); function filter(buckets) { return buckets.filter( _ => !filter_re.test( _.toLowerCase() ) ); } console.log( filter( [ "anciennes", "xanciennes", "anciennesx", "banane" ] ) );

Es común usar este enfoque en Perl, pero Perl optimiza este tipo de alternancia en un trie, que es extremadamente rápido. Se me acaba de ocurrir que tu JavaScript favorito podría no hacer eso, por lo que podría no ser tan eficaz como pensé antes. Aún así, mover la verificación de todas estas cadenas al motor de expresiones regulares debería ser más rápido que verificarlas todas en código JavaScript.

Pero si tuviera una lista realmente larga de términos para ignorar, le recomendaría usar un trie.

over 4 years ago · Santiago Trujillo Denunciar

0

Lo que podría usar es crear una matriz de claves IGNORANTES. Luego, en su función de filtro, simplemente use la declaración negativa para saber qué pasa y qué no pasa.

 const filter = buckets => { //Create a array of keys that you want to ignore const ignoreList = [ "anciennes", "anciens", "arrondissements", ] return buckets.filter(({ key }) => { return !ignoreList.some(item => key.toLowerCase().startsWith(item)) }) }
over 4 years ago · Santiago Trujillo 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