В чем разница между .map, every и .foreach?
-
27-10-2019 - |
Вопрос
Я всегда задавался вопросом, в чем была разница между ними. Кажется, они все делают то же самое ...
Решение
Разница в возвратных значениях.
.map()
возвращает новый массив объектов Создано путем принятия некоторых действий по оригинальному элементу.
.every()
Возвращает логическое - Верно, если каждый элемент в этом массиве удовлетворяет предоставленной функции тестирования. Важное отличие с .every()
заключается в том, что функцию теста не всегда может быть вызвана для каждого элемента в массиве. Как только функция тестирования возвращает False для любого элемента, больше нет элементов массива. Следовательно, функция тестирования обычно не должна иметь побочные эффекты.
.forEach()
ничего не возвращает - Он итерает массив, выполняющий заданное действие для каждого элемента в массиве.
Читайте об этих и многих других Методы итерации массива в MDN.
Другие советы
Ответ Gilly3 отличный. Я просто хотел добавить немного информации о других типах функций «цикла через элементы».
.every()
(Останавливает зацикливание в первый раз, когда итератор возвращает False или что -то ложное).some()
(Остановите зацикление, когда итератор вернется правда или что -то правда).filter()
(Создает новый массив, включая элементы, в которых функция фильтра возвращает True и пропускает те, где он возвращает ложь).map()
(Создает новый массив из значений, возвращаемых функцией итератора).reduce()
(Создает значение путем повторного вызова итератора, передавая предыдущие значения; см. Спецификацию для деталей; полезно для суммирования содержимого массива и многих других вещей).reduceRight()
(как уменьшить, но работает в нисходящем, а не восходящем порядке)
Кредит: TJcrowder На что-то за массивом в JavaScript?
Еще одно рассмотрение вышеупомянутых великих ответов - цепочка. С Foreach () вы не можете цепорить, но с Map (), вы можете.
Например:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
С .foreach () вы не можете сделать .sort (), вы получите ошибку.
За Рамда, разница между R.map()
а также R.forEach()
является:
R.forEach()
возвращает оригинальный массив, тогда какR.map()
Возвращает функторR.forEach()
может работать только на массиве, ноR.map()
Может также работать на объекте (т.е. пары ключей/значения объекта обрабатываются как массив)