Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

143
Vistas
JavaScript Sort by number in a string

How could i sort e.g an array like this one:

[
  '<@520968882077433856> is level **7,64** _(18115.5 total xp)_',
  '<@289037609274048513> is level **7,07** _(14473 total xp)_',
  '<@672835870080106509> is level **8,25** _(22473.5 total xp)_',
  '<@536686935134175254> is level **6,22** _(10184.5 total xp)_',
]

I would like to sort it by the amount of total xp, so the number within the brackets.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

You can use the sort callback. Extract the number with a regular expression:

const data = [
  '<@520968882077433856> is level **7,64** _(18115.5 total xp)_',
  '<@289037609274048513> is level **7,07** _(14473 total xp)_',
  '<@672835870080106509> is level **8,25** _(22473.5 total xp)_',
  '<@536686935134175254> is level **6,22** _(10184.5 total xp)_',
];

const regex = /(?<=_\()[\d.]+/;
data.sort((a, b) => +a.match(regex) - +b.match(regex));
console.log(data);

The + is used to convert the returned array (with one match element) to a string and then that to a number. You could use ?.[0] to actually get that first array element.

about 4 years ago · Juan Pablo Isaza Denunciar

0

We can try sorting using a custom lambda expression:

var input = [
    '<@520968882077433856> is level **7,64** _(18115.5 total xp)_',
    '<@289037609274048513> is level **7,07** _(14473 total xp)_',
    '<@672835870080106509> is level **8,25** _(22473.5 total xp)_',
    '<@536686935134175254> is level **6,22** _(10184.5 total xp)_',
];
var output = input.sort( (a, b) => parseFloat(a.match(/(\d+(?:\.\d+)?) total xp\b/)[1]) - parseFloat(b.match(/(\d+(?:\.\d+)?) total xp\b/)[1]));
console.log(output);

In the above we are extracting the number which is followed by total xp, parsing it as a float, and then using that value in the sorting comparator. If you want descending order, then just reverse the inequality in the lambda function.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Here is another try, looking for a space after the number:

const arr=[
  '<@520968882077433856> is level **7,64** _(18115.5 total xp)_',
  '<@289037609274048513> is level **7,07** _(14473 total xp)_',
  '<@672835870080106509> is level **8,25** _(22473.5 total xp)_',
  '<@536686935134175254> is level **6,22** _(10184.5 total xp)_',
];

function getN(s){
 return s.match(/_\((.+?) /)[1];
}
arr.sort((a,b)=>getN(a)-getN(b))

console.log(arr)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda