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

105
Visualizações
Agrupe la matriz de objetos principal en función del filtro de la matriz de objetos secundarios

He codificado y obtuve los resultados que quiero, pero creo que este código parece sucio.

 const verses = [{ index: 1, verses: [{ level: 1 }, { level: 1 } ] }, { index: 2, verses: [{ level: 1 }, { level: 1 } ] }, { index: 3, verses: [{ level: 2 }] }, { index: 4, verses: [{ level: 2 }] }, { index: 5, verses: [{ level: 2 }, { level: 2 } ] }, { index: 6, verses: [{ level: 3 }, { level: 3 } ] }, { index: 7, verses: [{ level: 3 }, { level: 3 }, { level: 4 }, { level: 4 } ] } ] function getVerseIndexByLevel(level) { const result = verses.map(v => { const mappingByLevel = Math.max.apply(Math, [...new Set(v.verses.map(w => w.level))]) const mappingByVerse = v.index return { level: mappingByLevel, verse: mappingByVerse } }).filter(v => v.level === level).map(v => v.verse) return result } for (let i = 1; i <= 4; i++) { console.log({ level: i, verse: getVerseIndexByLevel(i) }) }

¿Mi código anterior consume demasiado rendimiento?

¿Podría hacerlo más limpio y simple sin cambiar el resultado en absoluto?

-No sé qué detalles tengo que agregar más, StackOverflow me obligó a escribir esto porque la publicación es principalmente código. pero espero que lo entiendas con solo mirar los resultados del código.-

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En cuanto al rendimiento, lo único que puedo ver que podría mejorar sería llamar a getVerseIndexByLevel solo una vez y usar el mapeo de resultados calculado, en lugar de llamarlo varias veces (lo que requiere volver a analizar la entrada cada vez). Algo como

 const verseIndicies = getVerseIndicies(); for (let i = 1; i <= 4; i++) { console.log({ level: i, verse: verseIndicies[i] }) }

Otra ligera mejora: dado que está utilizando la sintaxis de ES6, no necesita .apply a Math.max , solo distribuya el conjunto en él.

Tampoco es necesario que primero convierta los números de nivel en un Conjunto; dado que se pasa a Math.max de todos modos, las repeticiones no son un problema.

 const verses=[{index:1,verses:[{level:1},{level:1}]},{index:2,verses:[{level:1},{level:1}]},{index:3,verses:[{level:2}]},{index:4,verses:[{level:2}]},{index:5,verses:[{level:2},{level:2}]},{index:6,verses:[{level:3},{level:3}]},{index:7,verses:[{level:3},{level:3},{level:4},{level:4}]}]; function getVerseIndicies() { const verseIndicies = {}; for (const v of verses) { const level = Math.max(...v.verses.map(w => w.level)); verseIndicies[level] ??= []; verseIndicies[level].push(v.index); } return verseIndicies; } const verseIndicies = getVerseIndicies(); for (let i = 1; i <= 4; i++) { console.log({ level: i, verse: verseIndicies[i] }) }

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