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

Passando parâmetro a mais na função concat

Flavio, nas sugestões de respostas está sempre sendo chamada a função concat passando como segundo parâmetro um array vazio.

Ex:

let listaDeNegociacoes = dadosServidor
    .reduce((novoArray, array) => novoArray.concat(array, []))
    .map(dado => new Negociacao(new Date(dado.data), dado.quantidade, dado.valor ));

É só um erro de digitação ou tem algum motivo específico?

Testei aqui sem e não teve diferença.

let listaDeNegociacoes = dadosServidor
    .reduce((novoArray, array) => novoArray.concat(array))
    .map(dado => new Negociacao(new Date(dado.data), dado.quantidade, dado.valor ));
8 respostas

Jhosef! Vou verificar para você agora!

Blz!

solução!

Oi Jhoseft! Na verdade, o [] não é do concat, é do reduce. É que no reduce você pode indicar o valor inicial da variável que receberá o resultado final do reduce. Veja na API https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

Contudo, quando você não passa o valor inicial conforme descrito na API, ele considera como valor o primeiro argumento passado para a função reduce, no caso, ele considera novoArray. É por isso que funciona.

É verdade, não me atentei a esse ponto.

No exercício que incluímos o valor total das negociações nós colocamos o valor inicial também.

Valeu Flavio, excelente treinamento.

Vou criar um exercício ou completar o primeiro exercício de reduce com esta informação.

Obrigado pelo retorno.

Olha um exemplo:

numeros = [1,2,3,4];

let resultado = numeros.reduce((anterior, atual) => anterior + atual);
alert(resultado);

numeros = [1,2,3,4];

let resultado2 = numeros.reduce((anterior, atual) => anterior + atual, 5);
alert(resultado2);

No primeiro caso, não queremos começar a partir de um valor, sendo assim, não passamos o valor inicial. O resultado é 10.

No segundo caso, queremos que o reduce já comece de 5, sendo assim, o resultado final será 15!

Sendo assim, nada me impede de fazer o primeiro reduce passando 0:

numeros = [1,2,3,4];

let resultado = numeros.reduce((anterior, atual) => anterior + atual, 0);
alert(resultado);

O resultado será 10 também. Eu gosto de inicializar sempre o valor do reduce, é um hábito meu, mas como você pode perceber há cenários que não é necessário.

Confere lá (mas coloquei no primeiro módulo, e não no segundo)

https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-1/section/5/task/9

Show de bola!