1
resposta

Sobre a explicação da questão Stefany

Primeiro, ela fez uma função calculaProximaIdade(), que recebe a idade que ela tem agora e imprime quantos anos ela terá depois do aniversário. Em seguida, ela criou a função calculaProximasIdades(), que recebe a lista de idades dela e de seus amigos e devolve quantos anos todos terão ao final do ano. Por fim, ela fez uma função calculaIdadesDaqui5Anos, que recebe a mesma lista de antes mas devolve as idades que todos terão daqui cinco anos.

Eu só consegui fazer criando uma nova *constante: idadeAmigos2 *porque ele estava acrescentando os 5 anos com o valor da idadesAmigos e sempre ficava um ano a mais. Sei que deve ter outra forma de fazer...mas nao encntrei

const idadeStefany = 21
const idadesAmigos = [20, 23, 18, 7]
const idadesAmigos2 = [20, 23, 18, 7]

function calculaProximaIdade(idades) {
  for (let i = 0; i < idades.length; i += 1) {
    idades[i] += 1
  }
  console.log('idade dela daqui a 1 ano sera: ' + idades)
}
calculaProximaIdade(idadeStefany)

function calculaProximasIdades(idades) {
  for (let i = 0; i < idades.length; i += 1) {
    idades[i] += 1
  }
  console.log('idade amigos daqui 1 ano:' + idades)
}
calculaProximasIdades(idadesAmigos)

function calculaIdadesDaqui5Anos(idades) {
  for (let i = 0; i < idades.length; i += 1) {
    idades[i] += 5
  }
  console.log('daqui a 5 anos: ' + idades)
}
calculaIdadesDaqui5Anos(idadesAmigos2)

* resposta* idade dela daqui a 1 ano sera: 21 idade amigos daqui 1 ano:21,24,19,8 amigos daqui a 5 anos: 25,28,23,12

1 resposta

Oi, Mírian, tudo bem?

Desculpe a demora em te responder!

Muito obrigado por compartilhar sua solução aqui na comunidade do fórum.

Há várias maneiras de solucionar o problema de alteração da lista original, por conta da passagem dos valores da lista por referência. Uma das formas é a que você propôs, contudo, não é uma solução viável levando em consideração outras funções que podem ser criadas para calcular as idades.

Uma das alternativas para o código que você compartilhou faz uso da propriedade array.map() que irá criar uma cópia da lista no interior da função.

Podermos usar a propriedade array.map() no interior da função por meio do seguinte comando:

 let idadesValue = idades.map(x => x);

Podemos ler esse comando da seguinte maneira: a lista idades, composta pelas idades da Stefany e dos seus amigos, vai receber através do ponto uma propriedade de nome mapque tem como parâmetro o valor identidade (x => x). O valor "x" representa cada um dos elementos da lista e a seta, que pode ser aplicada no editor de código - fonte como o sinal de igual (=) seguido do sinal de maior (>) indica que cada valor da lista será espelhado nele mesmo, ou seja, a partir da lista será feita uma cópia da lista no interior da função.

Desse modo, conseguimos obter os valores esperados para cada uma das funções.

O código completo para conseguir realizar a solução do problema no código da Stefany está abaixo:

function calculaProximaIdade(idade) {
  idade += 1;
  console.log(idade);
}

function calculaProximasIdades(idades) {
  let idadesValue = idades.map(x => x);
  for (let i = 0; i < idadesValue.length; i += 1) {
    idadesValue[i] += 1;
  }
  console.log(idadesValue);
}

function calculaIdadesDaqui5Anos(idades) {
  let idadesValue = idades.map(x => x);
  for (let i = 0; i < idadesValue.length; i += 1) {
    idadesValue[i] += 5;
  }
  console.log(idadesValue);
}

const idadeStefany = 21;
const idadesAmigos = [20, 23, 18, 7];

calculaProximaIdade(idadeStefany);
calculaProximasIdades(idadesAmigos);
calculaIdadesDaqui5Anos(idadesAmigos);

Caso queira se aprofundar mais no uso da propriedade .map deixo a documentação abaixo:

Se tiver dúvidas, estarei à disposição.

Abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!