Le bout de code d’hier :
splitMetaValues(str) {
let list = new Set(str.split(',').map(s => s.trim()).filter(i => i));
return [...list].sort((a, b) => a.localeCompare(b));
}
Cette fonction récupère la liste des mots-clés tapés dans le champ idoine, ceux-ci étant séparés par des virgules, et renvoie un tableau trié avec chacun des mots-clés.
Précision, un mot-clé ne doit pas être dupliqué dans le tableau renvoyé et les mots-clés ne doivent pas comporter d’espaces (ou caractères équivalents) au début ou à la fin.
splitMetaValues(str) {
…
}
str
est la chaîne de caractères qui contient la liste.
splitMetaValues(str) {
let list = new Set(...);
...
}
J’utilise un objet Set
qui fonctionne peu ou prou comme un tableau, sauf qu’il rejette automagiquement les doublons.
Pour construire cet objet, je fournis en paramètre la liste des mots-clés sous forme de tableau.
splitMetaValues(str) {
let list = new Set(str.split(',')...);
...
}
splitMetaValues(str) {
let list = new Set(str.split(',').map(s => s.trim())...);
...
}
splitMetaValues(str) {
let list = new Set(str.split(',').map(s => s.trim()).filter(i => i));
...
}
Ce tableau est créé avec str.split(',')
qui sépare la chaîne en autant d’éléments séparés par des virgules, auquel j’applique ensuite une méthode map(…)
qui va supprimer les espaces (et équivalents) au début et à la fin de chacun des éléments du tableau et auquel j’applique ensuite un filtre filter(…)
qui a pour objet de supprimer les éléments vides.
splitMetaValues(str) {
...
return [...list].sort((a, b) => a.localeCompare(b));
}
Ensuite comme il faut retourner un tableau, je le construis en déstructurant [...list]
la liste et j’applique ensuite une méthode de tri sort(…)
en m’appuyant sur la fonction de comparaison de caractères dépendant du réglage de langue du navigateur.
Et voilà :
splitMetaValues(str) {
let list = new Set(str.split(',').map(s => s.trim()).filter(i => i));
return [...list].sort((a, b) => a.localeCompare(b));
}
1 De nicod_ -
Brillant, et merci pour l’explication détaillée :)
Je ne connaissais ni Set() ni la syntaxe […list]
Ça ressemble un peu à de la programmation fonctionnelle non ?
2 De Franck -
J’aurais même pu aller plus loin en écrivant ça sur une seule ligne :
Mais je trouvais ça trop « extrême » et trop long pour une seule ligne :-)