天天看點

#yyds幹貨盤點#JS中的map用法

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}],