Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como Resolvi o Problema

Olá pessoal, sou super nova na programação, então esse problema foi um mega desafio para mim. A primeira ideia que tive era de criar uma nova variável dentro da função calculaProximasIdades com o resultado daquela função, sem incrementar valor na lista original, o que acaba a alterando.Vi a resolução dos colegas. Para mim isso faz mais sentido do que criar duas constantes com os mesmos valores das idades. Porém, não sei se resolvi o problema da melhor forma. Se alguém souber outra forma de criar uma nova variável dentro da função com o resultado dela, vou adorar saber e aprender!

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

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

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(idadesAmigos);

calculaIdadesDaqui5Anos(idadesAmigos);
2 respostas
solução!

Oi, Camila, 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. Uma das formas é a que você propôs. Outra alternativa, seria usar a 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 = [idadeStefany, 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!

Muito obrigada Rodrigo, não conhecia essa propriedade ainda, vou estudar sim. :D Brigada pela resposta, ajudou muito!