0
votes

Triez une gamme JavaScript de cordes avec des années à l'intérieur

Évaluation de 2 matrices extrêmement simples, une sorte d'accord et l'autre ne signifie pas: xxx

ce que je ne peux pas comprendre est pourquoi le tableau qtr ne sera pas trié correctement?


5 commentaires

Il est Tri, mais c'est déjà dans l'ordre trié. Que pensez-vous être différent?


Quel était votre résultat attendu de " TRAY QRRA " Trier?


Je me demande s'il s'attend à ce qu'il soit trié comme une date, de sorte que les éléments 2019 devraient aller avant 2020 .


Si vous aimez obtenir les données triés par date, vous pourriez envisager d'utiliser des chaînes qui ont l'année devant le mois, comme un ISO 8601 chaîne de date. Ceci est trié, malgré le même préfixe.


@Ninascholz a également besoin de mois à 2 chiffres, sinon 12 trier avant 3


4 Réponses :


2
votes

Parce que le tableau est déjà trié. Votre différence est faite par l'ID après "zzqtr_". Et les éléments sont déjà triés.


0 commentaires

0
votes

Array.Prototype. trier () code> est comparer des séquences UTF-16, donc zzqtr_1, zzqtr_2, zzqtr_3, zzqtr_4 code> est déjà trié en fonction de cela, le dernier bit de texte (l'année) est pas pertinent là-bas.

Je suppose que vous voulez trier par année, donc dans ce cas, vous devez mettre en place une fonction de tri personnalisée: p>

P>

const qtr = ['zzqtr_1_2020','zzqtr_2_2020','zzqtr_3_2019','zzqtr_4_2019'];

qtr.sort((a, b) => {
  const aParts = a.split('_');
  const bParts = b.split('_');
  
  return (parseInt(aParts[2]) - parseInt(bParts[2])) || a.localeCompare(b);
});

console.log(qtr.join(', '));


0 commentaires

0
votes

Le tableau est déjà trié. La chaîne après "zzqtr_" est en augmentation de la commande (à savoir: de 1 à 4). Donc, si vous avez fait quelque chose comme ceci:

var qtr = ['zzqtr_3_2020','zzqtr_1_2020','zzqtr_4_2019','zzqtr_1_2019'];
qtr.sort();
var x = qtr.toString();


0 commentaires

0
votes

array.pototype.sort () Les travaux en comparant les points de code UTF-16, qui peuvent entraîner des résultats inattendus parfois.

Au lieu de cela, envisagez d'utiliser string.prototype.localecompare () Fonction, qui compare deux chaînes, en fonction des alphabets des points locaux et non de points de code UTF-16


0 commentaires