Je crée une méthode de tri personnalisée dans Angular qui prend comme paramètre un nom de type string. Dans le fichier .html, chaque fois qu'un utilisateur clique sur les flèches, disons par exemple à côté de 'UserName', le ...

0
Randy Goldsmith 14 janv. 2021 à 21:49

2 réponses

Meilleure réponse

Ajoutez simplement le modificateur toLowerCase (). si un [nom] peut ne pas être une chaîne, alors un [nom] .toString (). toLowerCase ()

if(this.isAscendingOrder) {
    return this.entries.sort((a, b) => {
    if (a[name].toLowerCase() < b[name].toLowerCase())
      return -1;
    if (a[name].toLowerCase() > b[name].toLowerCase())
      return 1;
    return 0;
    });
  } else {
  return this.entries.sort((a, b) => {
    if (a[name].toLowerCase() < b[name].toLowerCase())
      return 1;
    if (a[name].toLowerCase() > b[name].toLowerCase())
      return -1;
    return 0;
  });
}
0
IgorK 14 janv. 2021 à 20:01

Vous pouvez le rendre légèrement plus organisé comme ceci:

sortByField(name:string) {

    this.isFaSort = false;
    if(this.sortByParam == name) {
      this.isAscendingOrder= !this.isAscendingOrder;
    } else {
      this.sortByParam = name;
      this.isAscendingOrder = true;
    }

    function getLowerCaseEntry(a, b) {
        return a[b].toLowerCase();
    }

    function compareStr(a ,b, asc) {
        return asc ? a.localeCompare(b) : b.localeCompare(a);
    }

    this.entries.sort((x,y) => compareStr(getLowerCaseEntry(x, name), getLowerCaseEntry(y, name), this.isAscendingOrder));
}
1
Moshezauros 14 janv. 2021 à 20:06
65725160