Bonjour,

Envoyé par
bvdig
Merci pour vos commentaires.
C'est intéressant.

J'ai réfléchi à quelques optimisations sur la vitesse d'exécution :
1)
++acc[word] est à remplacer par
acc[word]+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).
1 2 3 4 5 6 7 8 9 10 11 12 13
| const countWords2 = str => {
const obj = str.split(' ').sort().reduce((acc, word) => {
if (word !== 'se') {
acc[word] = acc[word]+1 || 1;
}
return acc;
}, {});
const arr = [];
for(const i in obj) {
arr[arr.length] = [i, obj[i]];
}
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| const countWords3 = str => {
const arr = [];
const obj = str.split(' ').reduce((acc, word) => {
if (word !== 'se') {
if (acc[word] !== undefined) {
acc[word]++;
}
else {
acc[word]=1;
arr[arr.length]=word;
}
}
return acc;
}, {});
arr.sort();
for(let i=arr.length-1 ; i>=0 ; i--) {
arr[i] = [arr[i], obj[arr[i]]];
}
return arr;
}; |
Enfin, je pense qu'on pourrait gagner encore un peu en remplaçant
reduce par une simple boucle.
1 |
0 |