- const posts = [
- {id: "moi", upVotes: 20},
- {id: "toi", upVotes: 89},
- {id: "lui", upVotes: 1},
- {id: "eux", upVotes: 123},];
- let [a,b] = posts.reduce((acc, cur) =>
- [cur, ...acc]
- .sort((a,b) => b.upVotes - a.upVotes)
- .slice(0,2)
- ,[]);
Que valent a et b. On pourra compléter le schéma suivant :
En savoir plus sur : concat
On commencera par comprendre la fonction suivante :
On peut également écrire :
code
Dessiner le code suivant :
code
console.time("sort after");
let [c,d] = posts
.reduce((acc, cur) => [cur, ...acc],[])
.sort((a,b) => b.upVotes - a.upVotes)
.slice(0,2);
console.timeEnd("sort after");
console.time("sort inside");
let [a,b] = posts
.reduce((acc, cur) =>
[cur, ...acc]
.sort((a,b) => b.upVotes - a.upVotes)
.slice(0,2)
,[]);
console.timeEnd("sort inside");
On commencera par comprendre la fonction suivante :
- let u = posts.reduce(function(acc, cur){
- acc = [...acc, cur];
- return acc;
- },[]);
- let u = posts.reduce(function(acc, cur){
- acc = [...acc, cur].sort((a,b) => b.upVotes - a.upVotes)
- return acc;
- },[]);
On peut également écrire :
- acc = [...acc, cur].sort(( {upVotes:a} ,{upVotes:b}) => b - a)
code
Dessiner le code suivant :
- let u = posts.reduce(function(acc, cur){
- acc = [cur, acc].sort(( {upVotes:a} ,{upVotes:b}) => b - a)
- return acc;
- },[]);
code
Performances
Sans approfondir la question importante des performances, considérons le cas de grands tableaux.
const posts = [];
const random = (min, max) => Math.floor(Math.random() * (max - min)) + min
for (let i = 0; i < 50000; i++) {
posts.push({ id:`ID_${i}`, upVotes: random(1, 1000000) });
}
const posts = [];
const random = (min, max) => Math.floor(Math.random() * (max - min)) + min
for (let i = 0; i < 50000; i++) {
posts.push({ id:`ID_${i}`, upVotes: random(1, 1000000) });
}
console.time("sort after");
let [c,d] = posts
.reduce((acc, cur) => [cur, ...acc],[])
.sort((a,b) => b.upVotes - a.upVotes)
.slice(0,2);
console.timeEnd("sort after");
console.time("sort inside");
let [a,b] = posts
.reduce((acc, cur) =>
[cur, ...acc]
.sort((a,b) => b.upVotes - a.upVotes)
.slice(0,2)
,[]);
console.timeEnd("sort inside");
Les simulations en temps sont sans appel !
$ node bidon.js
sort after: 16193.376ms
sort inside: 49.695ms
$ node bidon.js
sort after: 16177.614ms