Bonjour,
Merci pour vos commentaires.
C'est intéressant. :)
J'ai réfléchi à quelques optimisations sur la vitesse d'exécution :
1) ++acc est à remplacer par acc+1.
2) J'observe un traitement plus rapide en remplaçant Object.entries par une construction plus explicite du tableau (mais on perd en concision du code, à voir ce que l'on privilégie).
const countWords2 = str => {
const obj = str.split(' ').sort().reduce((acc, word) => {
if (word !== 'se') {
acc = acc+1 || 1;
}
return acc;
}, {});
const arr = [];
for(const i in obj) {
arr[arr.length] = [i, obj];
}
return arr;
};
3) Pour alléger le tri, je pense qu'il serait préférable de le faire à la fin (la différence sera appréciable à partir d'un certain nombre de répétitions des mots).
const countWords3 = str => {
const arr = [];
const obj = str.split(' ').reduce((acc, word) => {
if (word !== 'se') {
if (acc !== undefined) {
acc++;
}
else {
acc=1;
arr[arr.length]=word;
}
}
return acc;
}, {});
arr.sort();
for(let i=arr.length-1 ; i>=0 ; i--) {
arr = [arr, obj[arr]];
}
return arr;
};
Enfin, je pense qu'on pourrait gagner encore un peu en remplaçant reduce par une simple boucle.
1 |
0 |