recherche

Maison  >  Questions et réponses  >  le corps du texte

Trier la carte JavaScript par clé décimale

J'ai une carte avec le mois clé et la valeur clé 1... 31. Si je comprends bien, JavaScript convertit les clés de la carte en chaînes.

Après le tri selon le standard new Map([...myMap.entries()].sort()), la carte est triée par clé comme suit :

1, 11, 12, 13, ..., 19, 2, 20, 21, 22, 23, ... 29, 3, 30, 31.

J'ai trouvé un moyen de convertir les clés décimales en chaînes et de les trier avec 0填充单个数字的方法,以实现1,2,3,4,5, ... :

mykey.toString().padStart(2, "0");

Je soupçonne que cette approche est trop artificielle et qu'il devrait y avoir une méthode JavaScript prédéfinie pour obtenir un tri normal des cartes par la valeur décimale de la clé.

Des suggestions sur la façon de mieux trier les cartes JavaScript par clé décimale ?

Essayénew Map([...myMap.entries()].sort()) - la carte est triée comme suit : 1, 11, 12, ..., 19, 2, 20, 21, 22, ... 29, 3, 30, 31.

P粉755863750P粉755863750469 Il y a quelques jours677

répondre à tous(1)je répondrai

  • P粉501683874

    P粉5016838742023-09-20 12:24:53

    Mais une fois Map()对象的key中可以使用任何类型,但在使用默认的sort()implémentés, ils sont mis en œuvre.

    Pour résoudre ce problème, vous devez implémenter votre propre logique de tri pour les comparer explicitement sous forme de valeurs numériques. Dans l'exemple ci-dessous, il utilise des nombres entiers, mais cela peut être facilement mis à jour pour utiliser parseFloat() si des comparaisons décimales sont requises.

    const map = new Map();
    map.set(3, "foo");
    map.set(1, "foo");
    map.set(8, "foo");
    map.set(10, "foo");
    map.set(5, "foo");
    map.set(2, "foo");
    map.set(4, "foo");
    map.set(7, "foo");
    map.set(6, "foo");
    map.set(9, "foo");
    
    // does not work:
    const mapFailedSort =  new Map([...map.entries()].sort());
    console.log(mapFailedSort);
    
    // works:
    const mapAsc = new Map([...map.entries()].sort((a, b) => +a[0] > +b[0] ? 1 : -1));
    console.log(mapAsc)

    Remarque : la console d'extraits de code semble être incompatible avec les objets Map() - veuillez vérifier la sortie dans la console des outils de développement pour voir si l'ordre est correct.

    répondre
    0
  • Annulerrépondre