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: ""}
]
相关文章
相关标签/搜索