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

Parâmetros de CONCAT - Exercício "05 Simplificando o código"

No exercício "05 Simplificando o código" a forma não enxuta do reduce vem assim:

let listaDeNegociacoes = dadosServidor.reduce((novoArray, array) => {
    // novoArray receberá os itens de array, no final terá uma dimensão apenas
    return novoArray.concat(array, [])
})
.map(dado => {
    // para cada dado, cria uma instância de negociação. No final, teremos uma nova lista só com instâncias de Negociacao

    return new Negociacao(new Date(dado.data), dado.quantidade, dado.valor )
});

A forma enxuta assim:

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

No primeiro caso o concat recebe o array a ser concatenado e um array vazio, ou seja, dois parâmetros:

 return novoArray.concat(array, [])

Todavia, no no segundo caso o concat recebe apenas o array a ser concatenado e o array vazio ("[]") vem sozinho após uma vírgula:

.reduce((novoArray, array)  => novoArray.concat(array), [])

É como se na forma não enxuta e cheia de chaves fosse assim:

 return novoArray.concat(array), []

Isso está correto? Me parece que o array vazio [] está navegando sozinho ali, pois como no primeiro caso não é um parâmetro do concat.

Alguém explica?

4 respostas

Oi Bruno. Eu preciso revisar com calma o exercício. São vários na equipe que os criam.

Ai te dou um feedback e corrijo se for o caso. Só não estou com minha máquina agora.

Peço que continue com o curso e deixarei essa pergunta aberta. Até que eu responda.

Combinado?

Tinha esquecido essa questão. Ainda hoje te dou um feedback.

solução!

Oi Bruno! Havia um [] sobrando logo no início do exemplo. Estava assim:

let listaDeNegociacoes = dadosServidor.reduce((novoArray, array) => {
    // novoArray receberá os itens de array, no final terá uma dimensão apenas

   // AQUI, NÃO PRECISA DO SEGUNDO [], APESAR DE NÃO DAR ERRO, PORQUE CONCAT ACEITA PARÂMETROS INFINITOS.
    return novoArray.concat(array, [])
})
// código omitido

Todo o restante, inclusive a resposta do instrutor esta correta. Vou pegar uma para revisar:

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

Veja que o [] ai é do reduce, e não do concate. A função reduce precisa ter o valor de inicialização da variável totalizadora, no caso, não temos uma variável que acumula valores, mas um array que acumula dados de outros arrays.

Consegui tirar a dúvida?

Muito obrigado, Flávio.

Questão resolvida. Realmente havia um [] a mais no concat. Só funcionava porque ele aceita infinitos parâmetros.

Muito obrigado!