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