2
respostas

Código alternativo para o algoritmo misturando listas

Eu sempre tento fazer o código antes de ver o código da aula e cheguei a um resultado um pouco diferente dessa vez ( sem o uso do while):

const { edFolha, edGalho} = require('./arrays')

function blendArrays(list1, list2) {
    const newList = []
    const newListLength = list1.length + list2.length
    let l1Index = 0
    let l2Index = 0

    for (let i = 0; i < newListLength; i++) {
        // Se a lista 1 ainda tiver elementos
        if(l1Index < list1.length) {
            // Caso lista 2 não tenha mais elementos
            if(l2Index === list2.length) {
                newList[i] = list1[l1Index];
                l1Index++
            } // Caso as duas listas tenham elementos e o menor for o da lista 1
            else if(list1[l1Index].preco < list2[l2Index].preco) {
                newList[i] = list1[l1Index];
                l1Index++
            } // Senão é escolhido o elemento da lista 2
            else {
                newList[i] = list2[l2Index];
                l2Index++
            }
        } 
        // Caso lista 1 não tenha mais elementos
        else {
            newList[i] = list2[l2Index];
            l2Index++
        }
    }

    return newList
}

console.table(blendArrays(edFolha, edGalho))
2 respostas

Muito bom!

Samuel, existem maneiras de deixar o código ainda menor, da uma lida sobre concat JS e metodo sort(), tendo esse conhecimento, vc consegue resolver da seguinte maneira.

// recebendo a lista de livros de duas editoras diferentes
const { edFolha, edGalho } = require('./arrays');

/* Jutando as listas de livros das 2 editoras e criando o catalogo por ordem de preco crescente */
const catalogo = edFolha.concat(edGalho).sort((a, b) => a.preco - b.preco);