Я всегда задавался вопросом, какая разница между ними. Они все, похоже, делают то же самое...
В чем разница между .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()ключ/значение объекта обрабатываются как массив)