Я всегда задавался вопросом, какая разница между ними. Они все, похоже, делают то же самое...
В чем разница между .map,.every и .forEach?
Ответ 1
Разница в возвращаемых значениях.
.map()
возвращает новый массив объектов, созданных с помощью некоторых действий с исходным элементом.
.every()
возвращает логическое значение - true, если каждый элемент в этом массиве удовлетворяет предоставленной функции тестирования. Важным отличием .every()
является то, что тестовая функция не всегда вызывается для каждого элемента в массиве. Как только функция тестирования возвращает false для любого элемента, элементы массива больше не повторяются. Поэтому функция тестирования обычно не должна иметь побочных эффектов.
.forEach()
ничего не возвращает - он повторяет массив, выполняя заданное действие для каждого элемента в массиве.
Прочитайте об этих и многих других методах итераций Array на MDN.
Ответ 2
gilly3 ответ велик. Я просто хотел добавить немного информации о других типах функций "loop through elements".
-
.every()
(прекращает цикл, когда итератор возвращает false или что-то ложное) -
.some()
(останавливает цикл при первом итераторе возвращает true или что-то правдоподобное) -
.filter()
(создает новый массив включая элементы, в которых функция фильтра возвращает true и опуская те, где он возвращает false) -
.map()
(создает новый массив из значений, возвращаемых итератором функция) -
.reduce()
(создает значение путем повторного вызова итератора, передача предыдущих значений; см. спецификацию для деталей; полезным для суммирования содержимого массива и многих других вещей) -
.reduceRight()
(например, уменьшить, но работает в нисходящем, а не по возрастанию)
кредит для: T.J.Crowder Для каждого по массиву в JavaScript?
Ответ 3
Еще одно соображение на вышеупомянутые большие ответы - это цепочка. С forEach() вы не можете цепеть, но с помощью map() вы можете.
Например:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
с .forEach(), вы не можете выполнить .sort(), вы получите сообщение об ошибке.
Ответ 4
Для Рамды разница между R.map()
и R.forEach()
:
-
R.forEach()
возвращает исходный массив, тогда какR.map()
возвращает функтор -
R.forEach()
может работать только с массивом, ноR.map()
также может работать с объектом (т.R.map()
ключ/значение объекта обрабатываются как массив)