Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ligação de listas.

Quando nós fazemos esse método de atribuir um valor de uma lista para outra:

const alunos = ["João", "Juliana", "Caio", "Ana", "Walter"];
const mediasDosAlunos = [10, 7, 9, 6, 9.5];

let listaDeNotasEAlunos = [alunos, mediasDosAlunos];

Nós não estamos dando uma cópia dos dados das listas de alunos e média. E sim fazendo um ligação, então se você mesmo de depois você já tenha dado uma lista como elemento de outra lista. Se você modificar essas lista isoladamente, a que recebeu ambas as duas listas, no caso do exemplo acima, vai ser modificada também. Eu fiz um pequeno exemplo:

const alunos = ["João", "Juliana", "Caio", "Ana", "Walter"];
const mediasDosAlunos = [10, 7, 9, 6, 9.5];

let listaDeNotasEAlunos = [alunos, mediasDosAlunos];
console.log(listaDeNotasEAlunos);

alunos.pop();
mediasDosAlunos.pop();

for(let i = 0; i < listaDeNotasEAlunos[0].length; i++) {
    console.log(`Aluno ${listaDeNotasEAlunos[0][i]}, com a média de ${listaDeNotasEAlunos[1][i]}`)
};

console.log(listaDeNotasEAlunos);

O resultado é esse:

[
  [ 'João', 'Juliana', 'Caio', 'Ana', 'Walter' ],
  [ 10, 7, 9, 6, 9.5 ]
]
Aluno João, com a média de 10
Aluno Juliana, com a média de 7
Aluno Caio, com a média de 9
Aluno Ana, com a média de 6
[ [ 'João', 'Juliana', 'Caio', 'Ana' ], [ 10, 7, 9, 6 ] ]

Pois devido aos dois pops lá em cima, que retirou tanto "Walter" dos alunos, tanto a média de nota do mesmo. Foi modificado também a lista que tinha as lista dos alunos e médias. O que eu quero saber de fato é como eu faço uma cópia de uma lista para outra, e não uma ligação. No Python tinha essa questão também, mas era só na hora de referencia a lista: nomeDaLista[:]... era abrir os colchetes e dois pontos. Que isso dizia ao Python que você estava referenciando toda a lista, assim no caso de atribuir uma lista como elemento de uma lista, ele criaria uma copia independente, que não alteraria a outra. Não existindo uma ligação. No JS isso não funciona, como eu poderia fazer uma copia da lista e não uma ligação?

1 resposta
solução!

Tem várias maneiras de fazer isso, mas pra esse caso onde temos 2 arrays, talvez a forma mais simples seja utilizando o Spread Operator. Ficaria assim:

let listaDeNotasEAlunos = [[...alunos], [...mediasDosAlunos]];

No link, vc pode encontrar mais detalhes de como o spread operator funciona, mas essencialmente ele espalha os elementos de um array e teríamos, por exemplo, 'João', 'Juliana', 'Caio', 'Ana', 'Walter'. O que fiz na sequência foi englobar o espalhamento com [] para formar um novo array, assim o listaDeNotasEAlunos conterá os 2 arrays.