Ответы:
Предполагается, что 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) {});
return false;
1: аргументы к функциям обратного вызова обращены.
.each()Функция обратного вызова s, $.each()s и .map()s сначала берет индекс, а затем элемент
function (index, element)
$.map()Обратный вызов имеет те же аргументы, но обратный
function (element, index)
2: .each(), $.each()и .map()сделать что - то особенное сthis
each()вызывает функцию таким образом, что thisуказывает на текущий элемент. В большинстве случаев вам даже не нужны два аргумента в функции обратного вызова.
function shout() { alert(this + '!') }
result = $.each(['lions', 'tigers', 'bears'], shout)
// result == ['lions', 'tigers', 'bears']
Для получения $.map()в thisпеременном относится к глобальному объекту окна.
3: map()делает что-то особенное с возвращаемым значением обратного вызова
map()вызывает функцию для каждого элемента и сохраняет результат в новом массиве, который он возвращает. Обычно вам нужно использовать только первый аргумент в функции обратного вызова.
function shout(el) { return el + '!' }
result = $.map(['lions', 'tigers', 'bears'], shout)
// result == ['lions!', 'tigers!', 'bears!']
function shout() { alert(this + '!') } result = $.each(['lions', 'tigers', 'bears'], shout)неправильный результат противоречит вашему ответу !! jsfiddle.net/9zy2pLev
result === ['lions', 'tigers', 'bears']
В eachфункции перебирает массив, требующий прилагаемые функции один раза на каждый элемент, а также настройку thisк активному элементу. Это:
function countdown() {
alert(this + "..");
}
$([5, 4, 3, 2, 1]).each(countdown);
будет предупреждать 5..то 4..потом 3..то 2..потом1..
Map, с другой стороны, принимает массив и возвращает новый массив с каждым элементом, измененным функцией. Это:
function squared() {
return this * this;
}
var s = $([5, 4, 3, 2, 1]).map(squared);
приведет к тому, чтобы быть [25, 16, 9, 4, 1].
я понял это по этому :
function fun1() {
return this + 1;
}
function fun2(el) {
return el + 1;
}
var item = [5,4,3,2,1];
var newitem1 = $.each(item, fun1);
var newitem2 = $.map(item, fun2);
console.log(newitem1); // [5, 4, 3, 2, 1]
console.log(newitem2); // [6, 5, 4, 3, 2]
Итак, функция « каждая » возвращает исходный массив, а функция « Карта » возвращает новый массив
var intArray = [1, 2, 3, 4, 5];
//lets use each function
$.each(intArray, function(index, element) {
if (element === 3) {
return false;
}
console.log(element); // prints only 1,2. Breaks the loop as soon as it encountered number 3
});
//lets use map function
$.map(intArray, function(element, index) {
if (element === 3) {
return false;
}
console.log(element); // prints only 1,2,4,5. skip the number 3.
});
Jquery.map имеет больше смысла, когда вы работаете с массивами, поскольку он очень хорошо работает с массивами.
Jquery.each лучше всего использовать при переборе элементов селектора. Что подтверждается тем, что функция карты не использует селектор.
$(selector).each(...)
$.map(arr....)
Как видите, карта не предназначена для использования с селекторами.