Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

120
Visualizações
Cómo ordenar una matriz de objetos por cadena de números y caracteres especiales

Tengo una matriz de algunos objetos y quiero ordenarlos por propiedad de dimension , donde esa propiedad es una cadena de algunos intervalos de números y caracteres especiales. Aquí está el ejemplo de lo que tengo

 let data = [ { "soldTickets": 206, "soldRevenue": 12825.309997558594, "playedOffTickets": 2915, "playedOffRevenue": 495923.22019958496, "dimension": "10 - 25", "ticketsChange": -2709, "revenueChange": -483097.91020202637 }, { "soldTickets": 172, "soldRevenue": 17174.29998779297, "playedOffTickets": 2485, "playedOffRevenue": 467017.27951049805, "dimension": "25 - 50", "ticketsChange": -2313, "revenueChange": -449842.9795227051 }, { "soldTickets": 122, "soldRevenue": 9892.249984741211, "playedOffTickets": 9121, "playedOffRevenue": 1129196.3203125, "dimension": "> 200", "ticketsChange": -8999, "revenueChange": -1119304.0703277588 }, { "soldTickets": 52, "soldRevenue": 3159.239990234375, "playedOffTickets": 544, "playedOffRevenue": 88893.0400390625, "dimension": "0 - 10", "ticketsChange": -492, "revenueChange": -85733.80004882812 }, { "soldTickets": 38, "soldRevenue": 3162.1099700927734, "playedOffTickets": 476, "playedOffRevenue": 92432.79023742676, "dimension": "100 - 200", "ticketsChange": -438, "revenueChange": -89270.68026733398 }, { "soldTickets": 37, "soldRevenue": 3233, "playedOffTickets": 590, "playedOffRevenue": 97645.46026611328, "dimension": "50 - 100", "ticketsChange": -553, "revenueChange": -94412.46026611328 } ]; const toNumber = (str) => { if (Number(str)) { return Number(str); } else { return Number(str.substring(0, str.length - 1)); } }; data = data.sort( (a, b) => toNumber(String(a["dimension"]).split(' ')[0]) - toNumber(String(b["dimension"]).split(' ')[0]) ); console.log(data)

El problema es que la matriz no está ordenada como yo quería, ya que > 200 debería ser el último en este caso en lugar de ser el primero. El orden deseado debería ser así.

 ['0 - 10', '10 - 25', '25 - 50', '50 - 100', '100 - 200', '> 200']

¿Qué estoy haciendo mal? ¡Gracias por adelantado!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Si podemos asumir que el primer número es lo que queremos ordenar, puede usar una pequeña expresión regular para encontrar el primer número, y luego podemos ordenar eso.

Por supuesto, si su condición se vuelve más complicada, como < 20 , etc., entonces deberá volver a evaluar cómo decide el pedido.

p.ej.

 let data=[{soldTickets:206,soldRevenue:12825.309997558594,playedOffTickets:2915,playedOffRevenue:495923.22019958496,dimension:"10 - 25",ticketsChange:-2709,revenueChange:-483097.91020202637},{soldTickets:172,soldRevenue:17174.29998779297,playedOffTickets:2485,playedOffRevenue:467017.27951049805,dimension:"25 - 50",ticketsChange:-2313,revenueChange:-449842.9795227051},{soldTickets:122,soldRevenue:9892.249984741211,playedOffTickets:9121,playedOffRevenue:1129196.3203125,dimension:"> 200",ticketsChange:-8999,revenueChange:-1119304.0703277588},{soldTickets:52,soldRevenue:3159.239990234375,playedOffTickets:544,playedOffRevenue:88893.0400390625,dimension:"0 - 10",ticketsChange:-492,revenueChange:-85733.80004882812},{soldTickets:38,soldRevenue:3162.1099700927734,playedOffTickets:476,playedOffRevenue:92432.79023742676,dimension:"100 - 200",ticketsChange:-438,revenueChange:-89270.68026733398},{soldTickets:37,soldRevenue:3233,playedOffTickets:590,playedOffRevenue:97645.46026611328,dimension:"50 - 100",ticketsChange:-553,revenueChange:-94412.46026611328}]; data = data.sort( (a, b) => (a.dimension.match(/\d+/)[0] | 0) - (b.dimension.match(/\d+/)[0] | 0) ); console.log(data)

PD. el val | 0 , es solo una forma rápida de convertir una cadena en un número, similar a Number(val) , parseInt(val, 10) , si no convertimos a número, 200 habría sido menor que 30 , etc.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda