Eu sei que houve muitos tópicos como este. E eu sei o básico:.forEach()
opera na matriz original e .map()
na nova.
No meu caso:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
E esta é a saída:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
Não consigo entender por que usar practice
altera o valor de b
para undefined
.
Desculpe se esta é uma pergunta boba, mas sou muito novo nessa linguagem e as respostas que encontrei até agora não me satisfizeram.
javascript
arrays
loops
foreach
DzikiChrzan
fonte
fonte
.map
retorna um novo array ,.forEach
mas não retorna nada . Basicamente, se você deseja obter uma forma modificada do array anterior, você usa.map
, se não quiser, você usa.forEach
.Respostas:
Eles não são um e o mesmo. Deixe-me explicar a diferença.
forEach
: Itera sobre uma lista e aplica alguma operação com efeitos colaterais a cada membro da lista (exemplo: salvar cada item da lista no banco de dados)map
: Isso itera sobre uma lista, transforma cada membro dessa lista e retorna outra lista do mesmo tamanho com os membros transformados (exemplo: transformar a lista de strings em maiúsculas)Referências
Array.prototype.forEach () - JavaScript | MDN
Array.prototype.map () - JavaScript | MDN
fonte
Array.forEach
“Executa uma função fornecida uma vez por elemento da matriz.”Array.map
“Cria uma nova matriz com os resultados da chamada de uma função fornecida em cada elemento desta matriz.”Portanto,
forEach
não retorna nada. Ele apenas chama a função para cada elemento do array e então está feito. Portanto, tudo o que você retornar dentro dessa função chamada é simplesmente descartado.Por outro lado,
map
irá de forma semelhante chamar a função para cada elemento do array, mas em vez de descartar seu valor de retorno, ele irá capturá-lo e construir um novo array desses valores de retorno.Isso também significa que você pode usar
map
onde quer que esteja,forEach
mas ainda assim não deve fazer isso, para não coletar os valores de retorno sem qualquer propósito. É apenas mais eficiente não coletá-los se você não precisar deles.fonte
forEach
teria sido "mais eficiente" do quemap
especialmente se um polyfill fosse necessário para oferecer suporteforEach
em um navegador mais antigo (IE8 ou 9). Você não precisa atribuir o retorno demap
a nada; o valor de retorno deve ter o lixo coletado imediatamente após osmap
retornos, quando o retorno demap
não é atribuído.forEach
, conceitualmente, ainda será mais eficiente e mais adequado para tarefas em que você não precisa coletar resultados. E eu não sei sobre você, mas em 2015, eu não estava mais desenvolvendo para o IE8 (que aliás. Também não suportavamap
); e suporte para IE9 +forEach
. E, na verdade, um mês após minha resposta, a Microsoft encerrou o suporte para esses navegadores.map
eforEach
as chamadas só irá retornar uma vez que todo o conjunto foi loop através eo retorno tem sido chamado para cada um.fonte
A principal diferença que você precisa saber é que
.map()
retorna uma nova matriz, enquanto.forEach()
não retorna . É por isso que você vê essa diferença na saída..forEach()
apenas opera em todos os valores da matriz.Leia:
Array.prototype.forEach()
- JavaScript | MDNArray.prototype.map()
- JavaScript | MDNVocê também pode querer verificar: -
Array.prototype.every()
- JavaScript | MDNfonte
forEach: Se você deseja executar uma ação nos elementos de um Array e é o mesmo que você usa para loop. O resultado desse método não nos dá uma saída, apenas um loop pelos elementos.
map: Se você deseja executar uma ação nos elementos de um array e também deseja armazenar a saída de sua ação em um Array. Isso é semelhante ao loop for dentro de uma função que retorna o resultado após cada iteração.
Espero que isto ajude.
fonte
A diferença está no que eles retornam. Após a execução:
retorna uma matriz de elementos resultantes da função processada; enquanto:
retorna indefinido.
fonte
Análise de desempenho Os loops For têm um desempenho mais rápido do que map ou foreach conforme o número de elementos em uma matriz aumenta.
fonte
map: 1642ms forEach: 885ms for: 748ms
Diferença entre Foreach e mapa:
Map () : se você usar map, map pode retornar uma nova matriz iterando a matriz principal.
Foreach () : Se você usar Foreach, ele não poderá retornar nada para cada array principal de iteração.
link útil : use este link para entender a diferença
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
fonte
Algo a ser destacado é que foreach ignora os valores não inicializados, enquanto map não.
fonte
forEach () apenas percorre os elementos. Ele joga fora os valores de retorno e sempre retorna indefinido. O resultado desse método não nos dá uma saída.
map () percorre os elementos aloca memória e armazena os valores de retorno iterando o array principal
Exemplo:
fonte
Map retorna implicitamente, enquanto forEach não.
É por isso que quando você está codificando um aplicativo JSX, quase sempre usa map em vez de forEach para exibir conteúdo no React .
fonte
forEach () :
valor de retorno: indefinido
originalArray: modificado após a chamada do método
mapa () :
valor de retorno: novo Array preenchido com os resultados da chamada de uma função fornecida em cada elemento do array de chamada
originalArray: não modificado após a chamada do método
fonte