Sempre me perguntei qual era a diferença entre eles. Todos eles parecem fazer a mesma coisa ...
javascript
foreach
map-function
0x499602D2
fonte
fonte
every
eforEach
não são métodos jQuery, acho improvável que a questão se relacione com jQuery de alguma forma. developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6Respostas:
A diferença está nos valores de retorno.
.map()
retorna um novo Array de objetos criado ao realizar alguma ação no item original..every()
retorna um booleano - verdadeiro se cada elemento nesta matriz satisfizer a função de teste fornecida. Uma diferença importante.every()
é que a função de teste nem sempre pode ser chamada para todos os elementos da matriz. Uma vez que a função de teste retorna falso para qualquer elemento, nenhum outro elemento do array é iterado. Portanto, a função de teste geralmente não deve ter efeitos colaterais ..forEach()
não retorna nada - itera o Array executando uma determinada ação para cada item no Array.Leia sobre estes e muitos outros métodos de iteração de Array em MDN .
fonte
A resposta de gilly3 é ótima. Eu só queria adicionar um pouco de informação sobre outros tipos de funções de "loop por elementos".
.every()
(para o loop na primeira vez que o iterador retorna falso ou algo falso).some()
(pára de repetir na primeira vez que o iterador retorna verdadeiro ou algo verdadeiro).filter()
(cria uma nova matriz incluindo elementos onde a função de filtro retorna verdadeiro e omitindo aqueles onde retorna falso).map()
(cria uma nova matriz a partir dos valores retornados pela função iteradora).reduce()
(cria um valor chamando repetidamente o iterador, passando os valores anteriores; consulte as especificações para obter os detalhes; útil para somar o conteúdo de uma matriz e muitas outras coisas).reduceRight()
(como reduzir, mas funciona em ordem decrescente em vez de crescente)crédito para: TJCrowder For-each sobre um array em JavaScript?
fonte
Outra consideração para as grandes respostas acima é o encadeamento. Com forEach () você não pode encadear, mas com map (), você pode.
Por exemplo:
com .forEach (), você não pode fazer o .sort (), você obterá um erro.
fonte
Para Ramda , a diferença entre
R.map()
eR.forEach()
é:R.forEach()
retorna a matriz original, enquantoR.map()
retorna um functorR.forEach()
só pode operar em uma matriz, masR.map()
também pode operar em um objeto (ou seja, os pares de chave / valor do objeto são tratados como uma matriz)fonte