Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

83
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!