forEach、map、filter、find这几个都是数组的遍历方法,现在总结一下
1. 概念
(1)forEach 仅仅是一个遍历。
var arr = ['apple', 'orange']
arr.forEach(function(item,index,array){
console.log(item) //apple orange
});
(2)map 遍历并return的每一项生成一个新数组。
var arr = ['apple', 'orange']
let res = arr.forEach(function(item,index,array){
return item
});
console.log(res)//['apple', 'orange']
在遍历角度看map性能较低,但是在生成新对象的时候,map有返回值,它就可以进行链式操作,可读性和书写性更好。
(3)filter 方法创建一个新数组,其包含通过所提供函数实现的验证的包含所有元素的数组,都未满足验证则是空数组[]。
var arr = ['apple', 'orange']
let res = arr.filter(function(item,index,array){
return item === "orange"
});
console.log(res)//['orange']
注意:map不能使用if判断来替代filter。因为map使用if判断来return,那不return的时候值就是undefined了,而map是只对满足条件的元素进行添加。
(4)find 方法返回第一个满足验证的元素,其值是各种类型,都未满足验证则是undefined。
var arr = ['apple', 'orange',{name:12}]
let res = arr.find(function(item,index,array){
return typeof item === "object"
});
2. 总结
(1)foreach和map的区别
foreach仅仅是个遍历,它没有返回值,而map会遍历每一项逐项返回成新数组。
map有返回值,可以进行链式操作,在生成新数组时操作更方便。foreach性能更好,如果你不打算生成新数组就使用foreach吧。
链式操作:
let rs = arr.filter((n) => n > 30).map((n) => n * 2).reduce((prev, val) => prev + val, 0)
(2)find和filter的区别
find和filter都是查找后返回,但是filter是多项形成的是一个数组,find是第一项单个元素。
所以filter验证不成功是[],find验证不成功是undefined。
(3)foreach和map与普通循环遍历还有哪些差别
foreach 和 map 不可使使用break和continue,在函数中都不能使用return来进行打断
```