Метод each
предназначен для использования в качестве неизменного итератора, тогда как метод map
может использоваться в качестве итератора, но на самом деле он предназначен для манипулирования предоставленным массив и вернуть новый массив.
Еще одна важная вещь, на которую следует обратить внимание, это то, что функция each
возвращает исходный массив, а функция map
возвращает новый массив. Если вы чрезмерно используете возвращаемое значение функции map, вы можете потратить много памяти.
Например:
var items = [1,2,3,4];
$.each(items, function() {
alert('this is ' + this);
});
var newItems = $.map(items, function(i) {
return i + 1;
});
// newItems is [2,3,4,5]
Вы также можете использовать функцию карты для удаления элемента из массива. Например:
var items = [0,1,2,3,4,5,6,7,8,9];
var itemsLessThanEqualFive = $.map(items, function(i) {
// removes all items > 5
if (i > 5)
return null;
return i;
});
// itemsLessThanEqualFive = [0,1,2,3,4,5]
Вы также заметите, что this
не отображается в функции map
. Вы должны будете указать первый параметр в обратном вызове (например, мы использовали i
выше). По иронии судьбы, аргументы обратного вызова, используемые в каждом методе, являются обратными аргументам обратного вызова в функции map, поэтому будьте осторожны.
map(arr, function(elem, index) {});
// versus
each(arr, function(index, elem) {});