jQuery map vs. 每个
2022-08-30 00:45:08
在 jQuery 中,和 函数似乎做同样的事情。两者之间是否有任何实际差异?您何时会选择使用一个而不是另一个?map
each
在 jQuery 中,和 函数似乎做同样的事情。两者之间是否有任何实际差异?您何时会选择使用一个而不是另一个?map
each
每个方法都是
一个不可变的迭代器,其中映射
方法可以用作迭代器,但实际上意味着操作提供的数组并返回新数组。
需要注意的另一件重要事情是,该函数返回原始数组,而该函数返回一个新数组。如果过度使用 map 函数的返回值,则可能会浪费大量内存。each
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]
还可以使用 map 函数从数组中删除项。例如:
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]
您还将注意到,函数中未映射 。您必须在回调中提供第一个参数(例如,我们在上面使用)。具有讽刺意味的是,每个方法中使用的回调参数与 map 函数中的回调参数相反,因此要小心。this
map
i
map(arr, function(elem, index) {});
// versus
each(arr, function(index, elem) {});
1:回调函数的参数被反转。
.each()
的、$.each()
的和.map()
的回调函数首先获取索引,然后获取元素
function (index, element)
$.map()
的回调具有相同的参数,但已反转
function (element, index)
2: .each()
, $.each()
, 和 .map()
用这个做一
些特别的事情
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!']