JavaScript Array map() 方法


一、定義

map() 方法返回一個新數組,不會改變原始數組。同時新數組中的元素為原始數組元素調用函數處理后的值,並按照原始數組元素順序依次處理元素。

注意:map() 不會對空數組進行檢測。

二、語法

array.map(function(currentValue,index,arr), thisValue)

四、ES6書寫

let r = res.map(item => { return { title: item.name, sex: item.sex === 1? '男':item.sex === 0?'女':'保密', age: item.age, avatar: item.img } })
var arr = [1,2,3,4];
arr.map((item,index,arr) => {
    return item*10 //新數組為10,20,30,40
})
//map遍歷數組,返回一個新數組,不改變原數組的值。

五、補充
查map的時候,發現了一個帖子問map里面的this指的是啥,感覺沒太明白,關於this,真是個頭疼的問題,需要深入研究。
先保存上有一個人的回答,以備不時之需。看起來說的好像能明白似的。
array.map(callback, this)
中的this:把this僅僅當做一個參數,即函數的實參。所以實參具體是什么要看它的聲明、定義以及值。舉個例子:

var object = {}
array.map(callback, object)
也就是說對於map方法而言,在實際用的時候,它的第二個參數是一個前面已經聲明過的變量。但是如果你傳入this,那么這個this就要往前找,往它所在的上一級作用域去找,如果可以找到對應的實例化對象,那么就是這個實例化對象了,如果找不到,那就指向了全局對象。

還是要舉個栗子:

var array = [1,2,3]
var a = {
  mapObject: function() {
    array.map(function(){}, this) // 這個時候的this是什么呢?是a啊!
  }
}
而如果不是在一個實例化對象里面:

array.map(function(){}, this) // this是window或者global啊!
至於你里面console.log(this)為什么是window,你就得知道.bind,比如:

!function(){
    console.log(this.name)
}.bind({
    name: "Sam"
})
bind, call, apply的作用都是讓函數里面的this指向給定的一個對象。

array.map(function() {}, this) 的作用實際上和 array.map(function() {}.bind(this)) 是一樣的。map的第二個參數就是給第一個參數bind一個對象,這樣在第一個參數里面就可以用this代替第二個參數。

回到你的題目中,前面第一個this其實就是指向了window,而function里面的this指向的是map的第二個參數,所以繞了一圈,還是指向了window.

this指向的一個小竅門:this指向的是當前作用域所屬實例化對象,如果沒有找到該對象,則是指向window。

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM