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)
everyeforEachnã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