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

154
Views
Ordenar lista por dos campos no funciona mecanografiado

Tengo una lista con elementos en mecanografiado:

 let productList = [ {active: false, location: 2, description: "test 123"}, {active: false, location: 15, description: "test 123"}, {active: false, location: 40, description: "test 123"}, {active: false, location: 15, description: "test 123"}, {active: false, location: 1, description: "test 123"}, {active: true, location: 2, description: "test 123"}, {active: false, location: 2, description: "test 123"}, {active: false, location: 7, description: "test 123"}, {active: false, location: 1, description: "test 123"} ]

Quiero ordenar esta lista para mostrar en la parte superior los elementos que tienen active: true y que tienen la misma ubicación, por ejemplo location: 0

Intenté esto, se ordena por activo en la parte superior:

 productList.sort((a, b) => (b.active - a.active));

Ahora también quiero agregar la ubicación para que aquellos con la misma ubicación se clasifiquen uno tras otro, uno de mis intentos fue este pero sin éxito:

 productList.sort((a, b) => (b.active - a.active)&& ((a.location === b.location) ? 1 : -1) );

Mi resultado final que quiero tener es mostrar activo en la parte superior e inmediatamente después de aquellos con la misma ubicación que el activo

 let productList = [ {active: true, location: 2, description: "test 123"}, {active: false, location: 2, description: "test 123"}, {active: false, location: 2, description: "test 123"}, {active: false, location: 1, description: "test 123"}, {active: false, location: 1, description: "test 123"}, {active: false, location: 7, description: "test 123"}, {active: false, location: 15, description: "test 123"}, {active: false, location: 15, description: "test 123"}, {active: false, location: 40, description: "test 123"}, ]

¿Puede alguien ayudarme por favor? Estoy atascado. Intenté de varias maneras pero no tuve éxito.

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

0

Deberá cambiar su primera condición para verificar si alguno de los elementos que coinciden con las ubicaciones a y b actuales están activos, no solo los elementos iterados actualmente. Aquí usando some() .

 let productList = [ { active: false, location: 2, description: "test 123" }, { active: false, location: 15, description: "test 123" }, { active: false, location: 40, description: "test 123" }, { active: false, location: 15, description: "test 123" }, { active: false, location: 1, description: "test 123" }, { active: true, location: 2, description: "test 123" }, { active: false, location: 2, description: "test 123" }, { active: false, location: 7, description: "test 123" }, { active: false, location: 1, description: "test 123" } ]; const hasActive = (o) => Number(productList.some(e => o.location === e.location && e.active)); const compare = (a, b) => ( hasActive(b) - hasActive(a) || a.location - b.location || b.active - a.active ); console.log(productList.sort(compare));

Una solución más complicada que primero agrupa por ubicación, luego ordena y mapea de nuevo a una matriz no agrupada.

 function groupSort(arr) { const grouped = {}; for (const object of arr) { const { location, active } = object; grouped[location] ??= { location, active, objects: [] }; grouped[location].objects.push(object); if (active) { grouped[location].active = true; } } return Object.values(grouped) .sort((a, b) => b.active - a.active || a.location - b.location) .flatMap(({ objects }) => objects.sort((a, b) => b.active - a.active)); }; const productList = [{ active: false, location: 2, description: "test 123" }, { active: false, location: 15, description: "test 123" }, { active: false, location: 40, description: "test 123" }, { active: false, location: 15, description: "test 123" }, { active: false, location: 1, description: "test 123" }, { active: true, location: 2, description: "test 123" }, { active: false, location: 2, description: "test 123" }, { active: false, location: 7, description: "test 123" }, { active: true, location: 1, description: "test 123" }]; const sorted = groupSort(productList); console.log(sorted);

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!