Мне всегда было интересно, в чем разница между ними. Кажется, все они делают одно и то же ...
Мне всегда было интересно, в чем разница между ними. Кажется, все они делают одно и то же ...
Ответы:
Разница в возвращаемых значениях.
.map()
возвращает новый массив объектов, созданный путем выполнения некоторых действий с исходным элементом.
.every()
возвращает логическое значение - истина, если каждый элемент в этом массиве удовлетворяет предоставленной функции тестирования. Важное отличие .every()
состоит в том, что функция тестирования не всегда может быть вызвана для каждого элемента в массиве. Как только функция тестирования возвращает false для любого элемента, повторение элементов массива больше не выполняется. Следовательно, функция тестирования обычно не должна иметь побочных эффектов .
.forEach()
ничего не возвращает - он выполняет итерацию по массиву, выполняя заданное действие для каждого элемента в массиве.
Прочтите об этих и многих других методах итерации массивов на MDN .
Ответ 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 разница между R.map()
и R.forEach()
заключается в следующем:
R.forEach()
возвращает исходный массив, тогда как R.map()
возвращает функторR.forEach()
может работать только с массивом, но R.map()
может также работать с объектом (т.е. пары ключ / значение объекта обрабатываются как массив)
every
иforEach
не методы jQuery, я думаю, что вряд ли вопрос каким-либо образом относится к jQuery. developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6