1. 程式人生 > >js中map()方法和apply()方法的總結

js中map()方法和apply()方法的總結

在學習vue.js的render函式時遇到一段程式碼如下:

render: function (createElement) {
  return createElement('div',
    Array.apply(null, { length: 20 }).map(function () {
      return createElement('p', 'hi')
    })
  )
}
由於對其中Array.apply和map不是很理解,於是便在網上查詢資料後,總結如下,方便以後自己回顧時進行復習。

map()

map()方法返回一個由原陣列中每個元素呼叫一個指定的方法後返回的值組成的一個新陣列。map()方法就是一種陣列的對映,[].map(callback,[thisObject]) callback=function(value,index,array){}

通常map方法在呼叫callback函式時,會傳遞三個引數:當前正在遍歷的元素,元素的索引,當前陣列本身

var list= [{name:'one',name:'two',name:'three'}];
list.map(function(value,index){reutrn index})  //[0,1,2]
list.map(function (value){return value.name}).join(",")  //one,two,three
對於["1","2","3"].map(parseInt)的返回值為[1,NaN,NaN]的解釋

由於map的callback函式傳遞三個引數,而parseInt本身只需要兩個引數,第一個為元素本身,第二個為進位制數,所以在進行轉換時,會忽略callback的第三個引數,而parseInt則會用元素的索引作為自己的進位制轉換數。最終結果就是[1,NaN,NaN]

Array.apply()

Array.apply(null,array)要求第二個引數是一個數組,Array.apply(null,[1,2,3])返回[1,2,3]

當第二個引數為一個帶有length屬性的物件時,則會當做一個數組來使用

所以Array.apply(null,{length:3})返回的結果為[undefined,undefined,undefined]