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

103
Views
Ordenar claves de objeto por dos condiciones pero dar prioridad a la primera

Estoy tratando de ordenar las claves de un objeto de acuerdo con tres condiciones, primero teniendo la palabra Current y luego Conv y finalmente Traffic , pero no quiero que ninguna condición deshaga la anterior.

 const obj = { 'Additional Traffic': 2, 'Current Conv': 1, 'Additional Conv': 0.5, 'Current Rev': 100, 'Additional Rev': 50 } const res = Object.keys(obj).sort((a, b) => a.includes('Current') && a.includes('Conv') ? -1 : 0) // Expected output // Current Conv // Current Rev // Additional Traffic // Additional Conv // Additional Rev console.log(res)

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

0

Dado que la segunda palabra no está ordenada alfabéticamente, sugiero crear un sortHash para dar valor numérico a las palabras.

  • Esto se puede mejorar usando solo la letra inicial y agregando más reglas.

  • también confío en que son solo 2 palabras ... se puede mejorar para manejar más palabras en la lógica

    const [wordA1, wordA2, wordA3, wordA4 /*...*/] = a.split(' ')

Código

 const obj = {'Additional Traffic': 2,'Current Conv': 1,'Additional Conv': 0.5,'Current Rev': 100,'Additional Rev': 50,} const sortHash = { word1: { Current: 0, Additional: 1, }, word2: { Traffic: 0, Conv: 1, Rev: 2, }, } const res = Object.keys(obj).sort((a, b) => { const [wordA1, wordA2] = a.split(' ') const [wordB1, wordB2] = b.split(' ') return ( sortHash.word1[wordA1] - sortHash.word1[wordB1] || sortHash.word2[wordA2] - sortHash.word2[wordB2] ) }) console.log(res)

about 4 years ago · Juan Pablo Isaza Report

0

 const obj = { 'Additional Traffic': 2, 'Current Conv': 1, 'Additional Conv': 0.5, 'Current Rev': 100, 'Additional Rev': 50 } const data = Object.keys(obj).sort((key1, key2) => { const key1ContainsCurrent = key1.includes('Current'); const key2ContainsCurrent = key2.includes('Current'); const key1ContainsConv = key1.includes('Conv'); const key2ContainsConv= key2.includes('Conv'); debugger; if (key1ContainsCurrent || ((!key1ContainsCurrent && !key2ContainsCurrent) && key1ContainsConv)) { return -1 } if (key2ContainsCurrent || key2ContainsConv) { return 1 } return 0; }); console.log(data);

about 4 years ago · Juan Pablo Isaza Report

0

por lo general, tendría una función que compara usando el primer criterio y si el resultado es 0 (igualdad), compara con el siguiente criterio.

Así que para ti eso sería:

 const obj = { 'Additional Traffic': 2, 'Current Conv': 1, 'Additional Conv': 0.5, 'Current Rev': 100, 'Additional Rev': 50 } const res = Object.keys(obj).sort((a, b) => { let result = b.indexOf('Current') - a.indexOf('Current'); if (result === 0) { result = b.indexOf('Conv') - a.indexOf('Conv'); } return result; }); // Expected output // Current Conv // Current Rev // Additional Traffic <-- need one more rule for this one to be sorted properly // Additional Conv // Additional Rev console.log(res)

Tenga en cuenta que si tiene muchas palabras para verificar, puede usar una matriz como esta:

 const obj = { 'Additional Traffic': 2, 'Current Conv': 1, 'Additional Conv': 0.5, 'Current Rev': 100, 'Additional Rev': 50 } const SORT_ARRAY = ['Current', 'Traffic', 'Conv']; const res = Object.keys(obj).sort((a, b) => { let sortCriteriaIdx = 0; let result = 0; while (result === 0 && sortCriteriaIdx < SORT_ARRAY.length) { const criteria = SORT_ARRAY[sortCriteriaIdx]; result = b.indexOf(criteria) - a.indexOf(criteria); sortCriteriaIdx++; } return result; }); // Expected output // Current Conv // Current Rev // Additional Traffic // Additional Conv // Additional Rev console.log(res)

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!