В чем разница между .map, .every и .forEach? - PullRequest
106 голосов
/ 08 сентября 2011

Мне всегда было интересно, в чем разница между ними.Кажется, они все делают одно и то же ...

Ответы [ 4 ]

202 голосов
/ 08 сентября 2011

Разница заключается в возвращаемых значениях.

.map() возвращает новый массив объектов , созданный путем выполнения некоторых действий с исходным элементом.

.every() возвращает логическое значение - true, если каждый элемент в этом массиве удовлетворяет предоставленной функции тестирования.Важное отличие от .every() заключается в том, что тестовая функция не всегда вызывается для каждого элемента в массиве.Как только функция тестирования возвращает false для любого элемента, элементы массива больше не повторяются.Поэтому у функции тестирования обычно не должно быть побочных эффектов .

.forEach() ничего не возвращает - Итерация массива, выполняющего данное действиедля каждого элемента массива.

Редактировать: Вот Документы MSDN , если вы предпочитаете.

78 голосов
/ 31 июля 2014

Ответ gilly3 великолепен. Я просто хотел добавить немного информации о других типах функций «проходных элементов».

  • .every() (прекращает зацикливание в первый раз, когда итератор возвращает false или что-то фальши)
  • .some() (останавливает цикл при первом обращении к итератору возвращает истину или что-то правдивое)
  • .filter() (создает новый массив включая элементы, где функция фильтра возвращает true и пропуская те, где возвращается false)
  • .map() (создает новый массив из значений, возвращаемых итератором функция)
  • .reduce() (создает значение путем повторного вызова итератора, переход в предыдущие значения; см спецификацию для деталей; полезным для суммирования содержимого массива и многого другого)
  • .reduceRight() (подобно уменьшению, но работает по убыванию, а не по в порядке возрастания)

кредит: T.J.Crowder Для каждого по массиву в JavaScript?

5 голосов
/ 24 июня 2016

Еще одним соображением к вышеупомянутым великим ответам является цепочка. С forEach () вы не можете связать, но с map () вы можете.

Например:

var arrayNumbers = [3,1,2,4,5];

arrayNumbers.map(function(i) {
    return i * 2
}).sort();

с помощью .forEach () вы не можете выполнить .sort (), вы получите ошибку.

0 голосов
/ 10 мая 2019

Для Рамда , разница между R.map() и R.forEach() составляет:

  1. R.forEach() возвращаетисходный массив, тогда как R.map() возвращает функтор
  2. R.forEach() может работать только с массивом, но R.map() также может работать с объектом (т.е. пары ключ / значение объекта обрабатываются как массив)
...