Мне всегда было интересно, в чем разница между ними. Кажется, все они делают одно и то же ...
В чем разница между .map, .every и .forEach?
Ответы (4)
Разница в возвращаемых значениях.
.map()
возвращает новый Массив объектов, созданный путем выполнения некоторых действий с исходным элементом.
.every()
возвращает логическое значение - истина, если каждый элемент в этом массиве удовлетворяет предоставленной функции тестирования. Важное отличие от .every()
состоит в том, что функция тестирования не всегда может быть вызвана для каждого элемента в массиве. Как только функция тестирования возвращает false для любого элемента, повторение элементов массива больше не выполняется. Следовательно, функция тестирования обычно не должна иметь побочных эффектов.
.forEach()
ничего не возвращает < / strong> - выполняет итерацию массива, выполняя заданное действие для каждого элемента в массиве.
Прочтите об этих и многих других методах итерации массива по адресу MDN.
prototype.some()
. Но в остальном хорошее объяснение.
- person Eduard Jacko; 09.07.2015
.filter()
, .reduce()
и .reduceRight()
). Мой ответ служит для пояснения трех методов, которые, похоже, делают одно и то же. .some()
не имеет таких же проблем с двусмысленностью, поскольку он не ведет себя одинаково, и его имя не звучит так, как будто оно могло бы делать то же самое.
- person gilly3; 09.07.2015
some
- нет. Однако, поскольку some
является полной противоположностью every
, я хотел бы утверждать, что эти два значения можно перепутать, и он так же тесно связан с every
, как и любые другие два. IMO @kresli делает хорошее замечание, добавляя примечание о some
в ответ сделало бы его более полезным (на самом деле я пришел сюда, потому что меня смущала разница между some
и every
).
- person ArneHugo; 03.02.2016
Ответ gilly3 отличный. Я просто хотел добавить немного информации о других типах функций "цикла по элементам".
.every()
(перестает зацикливаться в первый раз итератор возвращает false или что-то ложное).some()
(перестает зацикливаться в первый раз итератор возвращает истину или что-то правдивое).filter()
(создает новый массив, включающий элементы, в которых функция фильтра возвращает истину и опускает те, где она возвращает ложь).map()
(создает новый массив из значения, возвращаемые функцией итератора).reduce()
(увеличивает значение с помощью повторный вызов итератора с передачей предыдущих значений; подробности см. в спецификации; полезно для суммирования содержимого массива и многих других вещей).reduceRight()
(например, сокращение, но работает в порядке убывания, а не возрастания)
кредит: TJCrowder Для каждого над массивом в JavaScript?
Еще одно соображение по поводу приведенных выше замечательных ответов - это цепочка. С помощью forEach () вы не можете создать цепочку, но с помощью map () можно.
Например:
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
с .forEach () вы не можете выполнить .sort (), вы получите сообщение об ошибке.
Для Ramda разница между _ 1_ и R.forEach()
:
R.forEach()
возвращает исходный массив, тогда какR.map()
возвращает функторR.forEach()
может работать только с массивом, ноR.map()
также может работать с объектом (т.е. пары ключ / значение объекта обрабатываются как массив)
every
иforEach
не являются методами jQuery, я думаю, вряд ли вопрос каким-либо образом относится к jQuery. developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6 - person James Allardice   schedule 08.09.2011.every()
,.forEach()
- person gilly3   schedule 08.09.2011