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

84
Visualizações
ReactJs - Método de clasificación

Tengo una tabla en mi aplicación de reacción y obtiene sus datos de la API.

Quiero ordenar una de sus columnas. a[obj1][obj2] o b[obj1][obj2] Por lo general, es una cadena de números y, a veces, son iguales a "-" (Dash) Esta es mi función de clasificación:

 if (order === "DEF") { const sorted = props.currency.sort((a, b) => Number(a[obj1][obj2]) > Number(b[obj1][obj2]) ? 1 : Number(b[obj1][obj2]) > Number(a[obj1][obj2]) || a[obj1][obj2] === "-" ? -1 : 0 ); props.setCurrency(sorted); setOrder("ASC"); } else if (order === "ASC") { const sorted = props.currency.sort((a, b) => Number(a[obj1][obj2]) < Number(b[obj1][obj2]) || a[obj1][obj2] === "-" ? 1 : Number(b[obj1][obj2]) < Number(a[obj1][obj2]) ? -1 : 0 ); props.setCurrency(sorted); setOrder("DSC"); } else { const sorted = defaultCurrency; props.setCurrency(sorted); setOrder("DEF"); }

Después de llamar a la clasificación, quiero comportarme con "-" como un cero, pero los elementos que son iguales a "-" siempre se colocan en la parte superior de la tabla cuando el orden es igual a ASC o DSC , mientras que los otros elementos de la matriz se ordenan correctamente.

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

0

Si desea comportarse con "-" como un cero, en la función de clasificación puede agregar esto como su primera condición y devolver 0.

 .sort((a, b) => { if (a[obj1][obj2] === "-") return 0; return Number(a[obj1][obj2]) > Number(b[obj1][obj2]) ? 1 : Number(b[obj1][obj2]) > Number(a[obj1][obj2]) ? -1 : 0 })
about 4 years ago · Juan Pablo Isaza Relatório

0

Puede simplificar esto significativamente analizando primero los elementos comparados y luego aplicando una lógica simple para la clasificación.

Aquí se declara un solo customSort que acepta una matriz, una función para recuperar la propiedad relevante de cada elemento y una dirección booleana que por defecto es ascending: true .

Luego se accede al valor de cada elemento usando la función pasada y se convierte a un número (aquí con unario + ).

Finalmente, los elementos se ordenan primero por si isNaN , de lo contrario, se restan en función de la dirección booleana.

 const customSort = (arr, prop, asc = true) => { return [...arr].sort((a, b) => { a = +prop(a); b = +prop(b); return isNaN(a) - isNaN(b) || (asc ? a - b : b - a); }) } const data = [{ prop1: { prop2: '2' } }, { prop1: { prop2: '5' } }, { prop1: { prop2: '3' } }, { prop1: { prop2: '1' } }, { prop1: { prop2: '-' } }, { prop1: { prop2: '9' } }, { prop1: { prop2: '-' } },]; const obj1 = 'prop1'; const obj2 = 'prop2'; console.log(customSort(data, (o) => o[obj1][obj2], true)); console.log(customSort(data, (o) => o[obj1][obj2], false));

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