forEach和map方法的區別

forEach()和map()兩個方法都是ECMA5中Array引進的新方法,主要做用是對數組的每一個元素執行一次提供的函數,可是它們之間仍是有區別的。jQuery也有一個方法$.each(),長得和forEach()有點像,功能也相似。可是從本質上仍是有很大的區別的,那麼咱們探探究竟。vue

//forEach
array.forEach(callback(currentValue, index, array){
    //do something
}, this)
 
//或者
array.forEach(callback(currentValue, index, array){
    //do something
})  
 
//map:
var new_array = arr.map(callback[, thisArg]) 
 
//$.each()
$(selector).each(function(index,element))  //注意參數的順序

callback: 爲數組中每一個元素執行的函數,該函數接收三個參數,數組

參數一:當前數組中元素;參數二:索引; 參數三:當前數組。函數

this:可選,執行會掉時候,this的指向。this

區別:spa

一、forEach()返回值是undefined,不能夠鏈式調用。code

二、map()返回一個新數組,原數組不會改變。blog

三、沒有辦法終止或者跳出forEach()循環,除非拋出異常,因此想執行一個數組是否知足什麼條件,返回布爾值,能夠用通常的for循環實現,或者用Array.every()或者Array.some();索引

四、$.each()方法規定爲每一個匹配元素規定運行的函數,能夠返回 false 可用於及早中止循環。element

下面寫一些例子和項目中用到的:it

forEach用法:

var data = [1, 2, 3, 4];

data.forEach((item,index) => {
    console.log(data,index);
    if(item === 2){
        data.shift()    // 刪除數組的第一個元素
    }
})

輸出結果

 [1, 2, 3, 4] 0
 [1, 2, 3, 4] 1
 [2, 3, 4] 2

map用法:

var data = [1, 2, 3, 4];

var arr = data.map((item,index)=>{
    console.log(data,index);
    if(item === 2){
        data.shift()
    }
})
console.log(arr)

輸出:

 [1, 2, 3, 4] 0
 [1, 2, 3, 4] 1
 [2, 3, 4] 2
 [undefined, undefined, undefined, empty]

能夠看出二者的區別
固然vue項目也經常使用到

let data = [1,2,3,4];
let arr = data.map(item => {
   return {
        label: item,
        value: ''        
    } 
})
console.log(arr)

輸出:

[
    {label: 1, value: ""},
    {label: 2, value: ""},
    {label: 3, value: ""},
    {label: 4, value: ""}
]
相關文章
相關標籤/搜索