Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

105
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda