Je suis nouveau à JavaScript et j'essaie de créer une fonction qui accepte une matrice de toute longueur et crée un nouveau tableau avec le classement de ce tableau (c'est-à-dire [10, 5, 20] sortirait [2, 3 , 1]. C'est mon code jusqu'à présent (j'ai essayé à l'origine avec une plus grande série de boucles pour trouver le maximum à chaque fois, mais a couru dans des problèmes les obtenir pour répéter le même nombre de fois qu'il y a des chiffres dans la matrice, donc je suis restitué à une méthode de tri. Faites-moi savoir si quelqu'un peut aider à me diriger dans la bonne direction, merci !!
function rankings(array){
let finalArray = [];
for (i = 0; i < array.length; i++) {//set up final array
finalArray[i] = array[i];
}
for(let list of array){
array.sort((a,b)=>b-a)//array sorted in order
}
for (i = array.length-1; i>=0; i--){
}
return finalArray;
}
3 Réponses :
Trier un clone (via une propagation) de la matrice, selon votre logique de classement (décroissant dans ce cas). Utilisez array.map () Pour créer des tuples de [valeur, index + 1] et générer un Carte des tuples.
Utilisez p> array.map () code> sur le tableau d'origine et renvoyez les rangs respectifs de la carte: function rankings(array) {
const ranks = new Map([...new Set(array)].sort((a, b) => b - a)
.map((v, i) => [v, i + 1]))
return array.map(v => ranks.get(v));
}
const result = rankings([10, 5, 20, 5]);
console.log(result);
Si vous aimez avoir les mêmes rangs, les mêmes valeurs, Cou pourrait prendre la valeur stockée pour la cartographie.
p>
const
rankings = array => array.map(
Map.prototype.get,
[...array]
.sort((a, b) => b - a)
.reduce((i => (m, v) => m.set(v, m.get(v) || i++))(1), new Map)
);
const result = rankings([10, 5, 20, 5]);
console.log(result);Vous pouvez essayer:
p>
var data = [10, 5, 20, 5, 4, 25]; var sorted = [...new Set([...data].sort((a,b)=>b-a))] // sorting and filtering the data var result = data.map(elem=> getIndex = sorted.findIndex(v=>v==elem)+1); console.log(result);
Aiderait si vous avez expliqué pourquoi
[10, 5, 20] code> devrait renvoyer[2, 3, 1] code>. La relation n'est pas claire et votre terme n'est pas votre terme "classement". Fournir également des données d'échantillon et des résultats attendusLa façon dont je comprends,
10, 5, 20 code> doit renvoyer2, 1, 3 code> et non2, 3, 1 code>. Sinon, je ne vois pas ce que vous entendez par «classement».Qu'en est-il des mêmes valeurs? Ont-ils le même rang?
Salut - Désolé pour la confusion! Le nombre le plus élevé dans la matrice sera "1" et il comportera à partir de là (le 2e le plus élevé est deux, la plus faible est la longueur de la matrice). Voici quelques exemples de données et résultats attendus: classements ([6, 8, 1, 12, 4, 3, 9]); // [4, 3, 7, 1, 5, 6, 2] classement ([100]); // [1] Classements ([4, 2, 3, 1, 1]); // [1, 3, 2, 4]