3 回答

TA貢獻1934條經驗 獲得超2個贊
該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]
您還可以使用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]
您還將注意到,this該map函數未映射。您將必須在回調中提供第一個參數(例如,我們在i上面使用的)。具有諷刺意味的是,每個方法中使用的回調參數與map函數中的回調參數相反,因此請小心。
map(arr, function(elem, index) {});
// versus
each(arr, function(index, elem) {});

TA貢獻1921條經驗 獲得超9個贊
1:回調函數的參數相反。
.each()的,$.each()'s和.map()的回調函數走索引第一,然后將元件
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!']

TA貢獻1850條經驗 獲得超11個贊
的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);
會導致s被[25, 16, 9, 4, 1]。
添加回答
舉報