Мне всегда было интересно, в чем разница между ними. Кажется, все они делают одно и то же ...
Мне всегда было интересно, в чем разница между ними. Кажется, все они делают одно и то же ...
Ответы:
Разница в возвращаемых значениях.
.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