1
resposta

[Dúvida] Soma entre listas e Sintaxe

Código Completo

const controle = document.querySelectorAll("[data-controle]");
const estatistica = document.querySelectorAll("[data-estatistica]")

const pecas = {
    "bracos": {
        "forca": 29,
        "poder": 35,
        "energia": -21,
        "velocidade": -5
    },

    "blindagem": {
        "forca": 41,
        "poder": 20,
        "energia": 0,
        "velocidade": -20
    },
    "nucleos":{
        "forca": 0,
        "poder": 7,
        "energia": 48,
        "velocidade": -24
    },
    "pernas":{
        "forca": 27,
        "poder": 21,
        "energia": -32,
        "velocidade": 42
    },
    "foguetes":{
        "forca": 0,
        "poder": 28,
        "energia": 0,
        "velocidade": -2
    }
}

controle.forEach((itemLista) => {
    itemLista.addEventListener("click", (evento) => {
        manipulaDados(evento.target.dataset.controle, evento.target.parentNode);
        atualizaEstatisticas(evento.target.dataset.peca)
    })
})

function manipulaDados (operacao, controle) {
    const atributoRobo = controle.querySelector("[data-contador]");

    if(operacao === "-") {
        atributoRobo.value = parseInt(atributoRobo.value) - 1
    } else {
        atributoRobo.value = parseInt(atributoRobo.value) + 1
    }
}

function atualizaEstatisticas (peca) {
    estatistica.forEach((elemento) => {
        elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica]
    })
}

O código abaixo realiza a soma entre as listas, 1º item do elemento + 1º item do peças , 2º item do elemento + 2º item do peças...?

elemento.textContent = parseInt(elemento.textContent) + pecas[peca][elemento.dataset.estatistica]

Não entendi esta sintaxe de elementos com colchetes seguidos, ex.: x [ y ] [ z ]. Podem explicar melhor?

pecas[peca][elemento.dataset.estatistica]

Desde já agradeço!

1 resposta

Fala maninho, tudo bem? Espero que sim!!

Também sou aluno, mas vou tentar explicar a forma como compreendo. Para ajudar vou colocar aqui o trecho do html que tem os dados dos elementos de estatistica:

<section class="box estatisticas">
<<<<<<< HEAD
            <div class="estatistica">
                <p class="estatistica-titulo">Força</p>
                <div class="estatistica-valor">
                    <p class="estatistica-numero" data-estatistica="forca">0</p>
                </div>
            </div>
            <div class="estatistica">
                <p class="estatistica-titulo">Poder</p>
                <div class="estatistica-valor">
                    <p class="estatistica-numero" data-estatistica="poder">0</p>
                </div>
            </div>
            <div class="estatistica">
                <p class="estatistica-titulo">Energia</p>
                <div class="estatistica-valor">
                    <p class="estatistica-numero" data-estatistica="energia">0</p>
                </div>
            </div>
            <div class="estatistica">
                <p class="estatistica-titulo">Velocidade</p>
                <div class="estatistica-valor">
                    <p class="estatistica-numero" data-estatistica="velocidade">0</p>
                </div>
            </div>
        </section>

Pois bem, quanto a sua primeira pergunta... O código abaixo realiza a soma entre as listas, 1º item do elemento + 1º item do peças , 2º item do elemento + 2º item do peças...?

Eu diria que você atualiza os valores da lista de estatística de acordo com os valores quânticos da peça adicionada ou subtraída...

...você recebe por parâmetro a peça, que foi adicionada ou subtraída através da "function atualizaEstatisticas (peca){...}". Então, para cada elemento de estatistica (data-estatistica do html), eu pego o seu valor e somo ou subtraio o valor quântico equivalente da peça passada por parâmetro. Exemplo: 1º) elemento (data-estatistica="forca") (+ou-) valor quantico (forca) da peca passada por parâmetro ; 2º) elemento (data-estatistica="poder") (+ou-) valor quântico (poder) da peça passada por parâmetro.


Para sua segunda pergunta: pecas[peca][elemento.dataset.estatistica] Não entendi esta sintaxe de elementos com colchetes seguidos, ex.: x [ y ] [ z ]. Podem explicar melhor?

Assim como um array do tipo matriz, você pode obter o valor específico da lista usando array[x][y] onde x é o valor do índice da coluna e y da linha, assim obtenho o valor do conteúdo usando essa coordenada x, y. Neste caso do exercício você tem uma lista de objetos (braços, blindagem, nucleos, pernas, foguetes)(X) do tipo peça, e essa peça possui valores quânticos da qualidade da peça (forca, poder, energia e velocidade)(Y).

Então, se eu adicionei um braço, por exemplo, eu devo obter seus valores quânticos equivalente a cada passagem no laço forEach em estatistica, logo pecas[nome da peca=braco][nome do atributo quântico], assim, se o elemento estatístico em questão é velocidade , então, pecas[braco][velocidade]. Assim, você obtém o valor da peça e soma ao valor da estatística da página html.

Espero ter ajudado. Forte abraço