13 votes

Quel est l'équivalent en javascript de numpy argsort ?

Je veux trier le tableau d'imgUrl par nombre de clics. J'ai deux tableaux.

clickCount = [5,2,4,3,1]
imgUrl     = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg']

En numpy c'est facile. J'utilise order = np.argsort(clickCount) puis je crée un autre tableau newArray = [imgUrl[i] for i in order] .

Comment puis-je obtenir le même effet en javascript (de préférence en vanille) ?

16voto

Ori Drori Points 65611

Vous pouvez utiliser un Transformation schwartzienne également connu sous le nom de Decorate-Sort-Undecorate (DSU) en python.

DSU :

  1. Décorer - Utiliser Tableau#Map pour enrichir chaque élément du tableau avec les données de tri nécessaires
  2. Trier - trier en utilisant les données ajoutées
  3. Undocrate - extraire les données triées en utilisant à nouveau Array#map

Démonstration :

const clickCount = [5,2,4,3,1];
const imgUrl = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg'];

const result = imgUrl
  .map((item, index) => [clickCount[index], item]) // add the clickCount to sort by
  .sort(([count1], [count2]) => count2 - count1) // sort by the clickCount data
  .map(([, item]) => item); // extract the sorted items

console.log(result);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X