Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

108
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda