J'ai un tableau comme celui-ci:
arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"
Après le tri, le tableau de sortie doit être:
arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"
Je veux dire, je veux dans l'ordre décroissant de la longueur de chaque élément.
Vous pouvez utiliser Array.sort
pour trier le tableau. Une fonction de tri qui considère la longueur de la chaîne comme critère de tri peut être utilisée comme suit:
arr.sort(function(a, b){
// ASC -> a.length - b.length
// DESC -> b.length - a.length
return b.length - a.length;
});
Remarque: le tri de ["a", "b", "c"]
par longueur de chaîne n'est pas garanti pour renvoyer ["a", "b", "c"]
. Selon les spécifications :
La sorte n'est pas nécessairement stable (c'est-à-dire que les éléments qui se comparent Égaux ne restent pas nécessairement dans leur ordre d'origine).
Si l'objectif est de trier par longueur puis par ordre du dictionnaire, vous devez spécifier des critères supplémentaires:
["c", "a", "b"].sort(function(a, b) {
return a.length - b.length || // sort by length, if equal then
a.localeCompare(b); // sort by dictionary order
});
Voici le type, en fonction de la longueur d'une chaîne avec javascript comme vous l'avez demandé:
[la solution du problème par type de bulle] [1]
[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here
Nous pouvons utiliser la méthode Array.sort pour trier ce tableau.
var array = ["ab", "abcdefgh", "abcd"];
array.sort(function(a, b){return b.length - a.length});
console.log(JSON.stringify(array, null, '\t'));
Pour l'ordre de tri croissant:
a.length - b.length
Pour ordre de tri décroissant:
b.length - a.length
Attention: tous les navigateurs ne peuvent pas comprendre le code ES6!
Dans ES6, nous pouvons utiliser une expression de fonction flèche.
let array = ["ab", "abcdefgh", "abcd"];
array.sort((a, b) => b.length - a.length);
console.log(JSON.stringify(array, null, '\t'));
Sur la base de la réponse de Salman, j'ai écrit une petite fonction pour l'encapsuler:
function sortArrayByLength(arr, ascYN) {
arr.sort(function (a, b) { // sort array by length of text
if (ascYN) return a.length - b.length; // ASC -> a - b
else return b.length - a.length; // DESC -> b - a
});
}
alors il suffit d'appeler avec
sortArrayByLength( myArray, true );
Notez que, malheureusement, des fonctions ne peuvent/ne doivent pas être ajoutées au prototype Array, comme expliqué à cette page .
De plus, il a modifié le tableau passé en paramètre et ne renvoie rien. Cela forcerait la duplication du tableau et ne serait pas génial pour les grands tableaux. Si quelqu'un a une meilleure idée, veuillez commenter!