map()
map()
方法會傳回一個新數組,數組中的元素為原始數組元素調用函數處理後的值。
map
方法會給原數組中的每個元素都按順序調用一次
callback
函數。
callback
每次執行後的傳回值(包括 undefined)組合起來形成一個新數組。
callback
函數隻會在有值的索引上被調用;那些從來沒被賦過值或者使用
delete
删除的索引則不會被調用。
因為
map
生成一個新數組,當你不打算使用傳回的新數組卻使用
map
是違背設計初衷的,請用
forEach
或者
for-of
替代。你不該使用
map
: A)你不打算使用傳回的新數組,或/且 B) 你沒有從回調函數中傳回值。
callback
函數會被自動傳入三個參數:數組元素,元素索引,原數組本身。
var map = Array.prototype.map
var a = map.call("Hello World", function(x) {
return x.charCodeAt(0);
})
// a的值為[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
可以鍊式調用
arr.map(item=>item.time).map(item=>item.scaner)
- map 方法不會對空數組進行檢測;
- map 方法周遊數組時會傳回一個新數組,不會改變原始數組;
- map 方法有傳回值,可以return出來,map的回調函數中支援return傳回值;
- map 方法無法周遊對象,僅适用于數組的周遊。
-
方法處理數組元素的範圍是在map
方法第一次調用之前就已經确定了。調用callback
方法之後追加的數組元素不會被map
通路。如果存在的數組元素改變了,那麼傳給callback
的值是callback
通路該元素時的值。在map
函數調用後但在通路該元素前,該元素被删除的話,則無法被通路到。map
場景執行個體
var kvArray = [{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30}];
var reformattedArray = kvArray.map(function(obj) {
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray 數組為: [{1: 10}, {2: 20}, {3: 30}],