¿Cómo podría ordenar, por ejemplo, una matriz como esta:
[ '<@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)_', ]Me gustaría ordenarlo por la cantidad de xp total, por lo que el número entre paréntesis.
Puede utilizar la devolución de llamada de clasificación. Extraiga el número con una expresión regular:
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); El + se usa para convertir la matriz devuelta (con un elemento de coincidencia) en una cadena y luego en un número. Podrías usar ?.[0] para obtener realmente ese primer elemento de matriz.
Podemos intentar ordenar usando una expresión lambda personalizada:
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); En lo anterior, estamos extrayendo el número seguido por total xp , analizándolo como un flotante y luego usando ese valor en el comparador de clasificación. Si desea un orden descendente, simplemente invierta la desigualdad en la función lambda.
Aquí hay otro intento, buscando un espacio después del número:
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)