在实际的项目开发中,数组遍历最常见不过了,但是同样的都是数组遍历,哪种场景下使用就不是很清晰了,今天整理出来,希望对你有所帮助哟....
forEach()和map()两个方法都是ECMA5中Array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数,但是它们之间还是有区别的。
Map
一眼看到之后,千万不要和“地图”联系上,它其实指的就是映射,也就是将原数组被“映射成”新的数组,如下可见
array.map(callback,[ thisObject])
let data = ["zhangsan","lisi","xiaowang"];
let getName = data.map(function(val,index,arr){
return val+'-'+index)
})
console.log(getName) // ["zhangsan-0","lisi-1","xiaowang-2"]
ForEach
forEach方法中的function回调支持3个参数,且不能有返回值
- 第1个是遍历的数组内容
- 第2个是对应的数组索引
- 第3个是数组本身
let data = ["zhangsan","lisi","xiaowang"];
data.forEach(function(val,index,arr){
console.log(val+'-'+index) // ["zhangsan-0","lisi-1","xiaowang-2"]
})
ForIn
都是可遍历数组或者对象的属性,但是一般遍历对象很常用,数组的话一般可以用以上两种即可。
使用时需与hasOwnProperty搭配使用,以防止报错,使用 hasOwnProperty 方法判断属性是否存在,这种写法只会遍历出当前的数组,并不会遍历出__proto__的值
for (var item in num) {
if(obj1.hasOwnProperty(prop)){ //
console.log(item + "-" + num[item])
}
}
总结:
- map()会分配内存空间存储新数组并返回,forEach()不会返回数据。
- forEach()允许callback更改原始数组的元素,map()返回新的数组。
- forEach()返回值是undefined,不可以链式调用