1
resposta

Array, metodo reduce

Porque quando eu uso o metodo reduce de um array, no novo array a ser criado eu não consigo usar o metodo push? Exemplo:

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

Erro:

VM428:1 Uncaught TypeError: novoArray.push is not a function
    at <anonymous>:1:46
    at Array.reduce (<anonymous>)
    at <anonymous>:1:7

Mais eu consigo dar o concat

Exemplo:

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

Olá, Carlos, tudo bem?

O problema é que o método push() não retorna um novo array, e sim o tamanho do novo array.

Então, na segunda iteração do método reduce, o valor de novoArray na verdade é um número (de valor 1), que não possui o método push.

Por outro lado, o método concat() sim retorna um novo array.

Aliás, o código com concat que você enviou se comporta praticamente igual ao método flat(). As duas últimas linhas de código abaixo têm a mesma saída:

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

array.reduce((novoArray, array) => novoArray.concat(array), []); // [1, 2, 3, 4]
array.flat(); // [1, 2, 3, 4]

Espero ter ajudado! Abraços e bons estudos :)