web-dev-qa-db-fra.com

Comment définir une fonction de tri personnalisée en javascript?

J'utilise le plugin atocomplete.jquery pour suggérer du texte d'entrée, comme résultat j'obtiens ce tableau:

['White 023','White','White flower', 'Teatr']

Quand je commence à chercher quelque chose qui commence à partir de la sous-chaîne "te", cela me montre un tri de tableau comme ceci:

'White','White 023','White flower', 'Teatr'

J'ai besoin de quelque chose comme ça:

 'Teatr','White','White 023','White flower'

Des idées?

54
kirugan

Il se peut que le plugin soit sensible à la casse. Essayez de saisir Te au lieu de te. Vous pouvez probablement configurer vos résultats pour ne pas respecter la casse. Cette question pourrait aider.

Pour une fonction de tri personnalisée sur une Array, vous pouvez utiliser n'importe quelle fonction JavaScript et la passer en paramètre à la méthode sort() de Array comme ceci:

var array = ['White 023', 'White', 'White flower', 'Teatr'];

array.sort(function(x, y) {
  if (x < y) {
    return -1;
  }
  if (x > y) {
    return 1;
  }
  return 0;
});

// Teatr White White 023 White flower
document.write(array);

Plus d'informations ici sur Array.sort.

66
erickb

Pour Objects, essayez ceci:

function sortBy(field) {
    return function(a, b) {
        if (a[field] > b[field]) {
            return -1;
        } else if (a[field] < b[field]) {
            return 1;
        }
        return 0;
    };
}
20
Lior Elrom

ou plus court

sortBy(field){
 return (a[field] > b[field]) - (a[field] < b[field])
}
5
Kamyk.pl
function msort(arr){
    for(var i =0;i<arr.length;i++){
        for(var j= i+1;j<arr.length;j++){
            if(arr[i]>arr[j]){
                var swap = arr[i];
                arr[i] = arr[j];
                arr[j] = swap;
            }
        }
    }
return arr;
}
0
monster_enzy