Sempre me perguntei qual era a diferença entre eles. Todos eles parecem fazer a mesma coisa ...
Sempre me perguntei qual era a diferença entre eles. Todos eles parecem fazer a mesma coisa ...
Respostas:
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 .
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?
Outra consideração para as grandes respostas acima é o encadeamento. Com forEach () você não pode encadear, mas com map (), você pode.
Por exemplo:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
com .forEach (), você não pode fazer o .sort (), você obterá um erro.
Para Ramda , a diferença entre R.map()
e R.forEach()
é:
R.forEach()
retorna a matriz original, enquanto R.map()
retorna um functorR.forEach()
só pode operar em uma matriz, mas R.map()
também pode operar em um objeto (ou seja, os pares de chave / valor do objeto são tratados como uma matriz)
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.6