Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to shorten this JS function

Tags:

javascript

I have this Js function with hard coded filter parameters. It filter all the buckets sub objects when key start with a string from a given list. For now i havent found a way to put this list as an array...

     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 here :

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

how to transform this function to generate the !_key.startsWith( ... ) && from and array of string insted of this crazy hard coded long &&

      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" ]

thanks for reading

like image 431
AlainIb Avatar asked Jul 18 '26 06:07

AlainIb


2 Answers

You can use the inverse of array.some. It will return false if _key starts with any item from the array, or true otherwise.

 function filter(buckets) {
  return buckets.filter(({key}) => {
    const _key = key.toLowerCase();
    return !listOfTermToIgnore.some(item => _key.startsWith(item))
  })
}
like image 111
James Avatar answered Jul 19 '26 19:07

James


Use array.every() to check all the elements of the array.

function filter(buckets) {
    return buckets.filter(({key}) => {
        const _key = key.toLowerCase();
        return listOfTtermToIgnore.every(term => !_key.startsWith(term))
    }
});
like image 22
Barmar Avatar answered Jul 19 '26 18:07

Barmar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!