Para resolver esse problema, é necessário duplicar o Array, mas não por meio de uma simples atribuição como var array2 = array1;
, pois desta forma estaremos copiando apenas o endereço na memória do array1. A forma correta de copiar esse array, seria acessando cada valor do array e copiando ele para outro array, ou utilizando funções prontas como a função Array.from()
que já realiza esse trabalho. Desta forma, segue a solução que eu implementei.
function calculaProximaIdade(idade) {
idade += 1;
console.log(idade);
}
function calculaProximasIdades(idades) {
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 1;
}
console.log(idades);
}
function calculaIdadesDaqui5Anos(idades) {
for (let i = 0; i < idades.length; i += 1) {
idades[i] += 5;
}
console.log(idades);
}
const idadeStefany = 21;
calculaProximaIdade(idadeStefany);
const idadesAmigos = [idadeStefany, 20, 23, 18, 7];
calculaProximasIdades(Array.from(idadesAmigos));
calculaIdadesDaqui5Anos(Array.from(idadesAmigos));
console.log("# " + idadesAmigos);
Também seria possível criar a cópia do array dentro das respectivas funções, mas um array não precisa necessariamente estar armazenado dentro de uma variável, o array pode ser passado como parâmetro dentro de uma função da seguinte forma:
funcao([0, 1, 2, 3]
Dessa forma, achei mais coerente copiar o array e passa-lo como parâmetro do que copiar o array dentro da função.