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?