GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Uso do comando map em Javascript

Tags: #<Tag:0x00007fa00e5566e8>

Olá não estou entendendo como fazer este exercício.
Espero que alguém possa me ajudar…

  1. Implemente a função map abaixo e defina o(s) parâmetro(s) desta função de acordo com sua chamada. Você deve utilizar a função reduce de classe Array para implementar a função map. O teste vai funcionar se você implementar a função map adequadamente.
function map(//TODO) {
  //TODO
};

function executaTeste() {
  const array = [1, 2, 3, 4, 5];
  const arrayTriplicado = map((num) => num * 3, array);
  
  if (_.isEqual(arrayTriplicado, [3, 6, 9, 12, 15])) {
    console.log('✓ Passou no teste!')
  } else {
    console.error('O teste falhou :(')
    console.error('Resultado atual:');
    console.error(arrayTriplicado);
    console.error('Resultado esperado:');
    console.error([3, 6, 9, 12, 15]);
  }
}

executaTeste();

Como a função map recebe outra função, e o exercício diz para usar reduce. Tu deve fazer algo mais ou menos assim na função map:

return array.reduce( /* aqui vc implementa o reduce e usa a função recebida como parametro */ )

Dê uma lida na documentação, tente implementar e poste o código aqui. Boa sorte!

Veja a documentação do reduce nesse link: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

Obrigado!

Não estou sabendo como criar a função…

function map(function(num){

 let soma = 0;

 return array.reduce(callback(soma, num, array) {soma = num * 3 + soma}, 0);

});

function executaTeste() {

  const array = [1, 2, 3, 4, 5]

  const arrayTriplicado = map(num => num * 3, array)

  if (_.isEqual(arrayTriplicado, [3, 6, 9, 12, 15])) {

    console.log('✓ Passou no teste!')

  } else {

    console.error('O teste falhou :(')

    console.error('Resultado atual:')

    console.error(arrayTriplicado)

    console.error('Resultado esperado:')

    console.error([3, 6, 9, 12, 15])

  }

}

executaTeste()

Boas, é algo parecido com isto

function map(num, array) {

      num = array.reduce(function(atual, seguinte) {

        atual.push(seguinte * 3);

        return atual;

      }, []);

      console.log(num);

      return num;

    };

Repare que nessa linha, o que é passado para a função map é uma outra função e o array. Com isso, a função map deveria ficar assim:

function map(fn, arr) {
  return arr.reduce((agg, item) => {
    agg.push(fn(item)); // aqui a fn é: (num) => num * 3
    return agg;
  }, []);
};

O fn é a função que é usada no reduce, que será chamada para cada item no array.

1 Curtida

Obrigado!

//