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

149
Views
Ordenar objeto por categoría y nombre

¿Hay alguna forma en jQuery o javascript para ordenar los datos por categoría en orden descendente y el nombre en orden ascendente?

Intenté ordenar los datos dos veces de manera similar al código de muestra a continuación, pero no funciona como debería.

Los datos deben enumerarse por categoría como B, A y luego se ordenarán por nombre como AA, AB, BB, etc.

Muestra de datos y secuencia de comandos:

 var data = { 0: { category: 'A', name: 'AA' }, 1: { category: 'B', name: 'BB' }, 2: { category: 'A', name: 'AB' }, 3: { category: 'A', name: 'BB' } } var items = $( $.map( data, function ( val, i ) { return val; } ) ); // Sort data by category in DESC order. function sortByCategoryDescOrder( a, b ) { if ( a.category < b.category ) { return -1; } if ( a.category > b.category ) { return 1; } return 0; } function sortByNameAscOrder( a, b ) { if ( a.name < b.name ) { return -1; } if ( a.name > b.name ) { return 1; } return 0; } items.sort(sortByCategoryDescOrder); items.sort(sortByNameAscOrder);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>

El resultado esperado debe ser:

 var data = { 0: { category: 'B', name: 'BB' }, 1: { category: 'A', name: 'AA' }, 2: { category: 'A', name: 'AB' }, 3: { category: 'A', name: 'BB' } }

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Esta es mi solución:

 let data = { 0: { category: 'A', name: 'AA' }, 1: { category: 'B', name: 'BB' }, 2: { category: 'A', name: 'AB' }, 3: { category: 'A', name: 'BB' } } let result=Object.values(data).sort((a,b)=>{ if (a.category>b.category){ return -1; } else { if (a.category<b.category){ return 1; } else { if (a.name > b.name) { return 1 } else { if (a.name < b.name) { return -1 } } } } }); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Dos problemas.

  • Los valores devueltos de su clasificación sortByCategoryDescOrder son incorrectos. La ordenación en orden descendente debe devolver +1 cuando a < b , -1 cuando a > b y 0 en a === b .
  • función sortByNameAscOrder , no debe comparar objetos con diferentes category . Ya ha ordenado la matriz según la category , si vuelve a ordenar la matriz comparando diferentes valores de category , obtendrá el formato de la matriz original. Debe devolver 0 para diferentes valores de category , lo que significa que no está cambiando el orden en ese caso.

violín de trabajo

 var data = { 0: { category: 'A', name: 'AA' }, 1: { category: 'B', name: 'BB' }, 2: { category: 'A', name: 'AB' }, 3: { category: 'A', name: 'BB' } } var items = $($.map(data, function (val, i) { return val; })); // Sort data by category in DESC order. function sortByCategoryDescOrder(a, b) { if (a.category < b.category) { return 1; } if (a.category > b.category) { return -1; } return 0; } function sortByNameAscOrder(a, b) { if(a.category !== b.category) { return 0; } if (a.name < b.name) { return -1; } if (a.name > b.name) { return 1; } return 0; } console.log(items.sort(sortByCategoryDescOrder)); console.log(items.sort(sortByNameAscOrder));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>

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!