和foreach的区别和应⽤场景_forEach、filter、map间的区别以
及使⽤场景
filter过滤对象数组本⽂主要解释: forEach、filter、map、some、every、find、findIndex间的区别以及使⽤场景
从最开始学的for循环遍历⽅法,到后来层出不穷的各种遍历⽅法,其实最⼤的区别就是应⽤场景的不同,我们应该做到⽤什么⽅法去应⽤> 语法: 以上⽅法均接受⼀个函数作为参数, 形参分别是数组每⼀项, 下标, 原数组
## 举个栗⼦
以上是⼀些同学的的体重(weight)记录成⼀个数组
```
var w = [90, 80, 120, 140, 110, 60]
```
## 冬季称体重, 每个⼈减去 4⽄⾐服的重量为最终的体重
我们希望把这⼀批西⽠全部催熟⼀下,进⾏增重 可以⽤到`forEach`⽅法
```
w.forEach(item => item -= 4 )
```
`map`⽅法说:我也可以!
```
w.map(item => item -=50 )
```
`map`补充了⼀句,我还可以把重量统计表格,更新出⼀份新的给你
```
w = w.map(item =>
{ return item -=50 })
//[ 86, 76, 116, 136, 106, 56]
```
**forEach和map的最⼤区别就在于,forEach没有返回值。** 即便你给forEach加上return也没⽤
w = w.forEach(item =>
{ return item -=50 })
//undefined
```
## 医⽣:⼤于120以上需要看有⽆脂肪肝(筛选过滤)
`filter`是滤波的意思 从名字上看,就知道筛选过滤这样的活是`filter`来⼲的
```
var list = w.filter(item => { return item > 100 })
//[120, 140, 110]
```
返回⼀个新的对象数组,并不会改变原数组
## 问题:有没有体重过轻⼩于90的(⼀有没有符合条件的吧)
得个有代表性的,⼀看就知有没有啦
当只需要判断数组中有没有符合条件的时候(⼀个就⾏) 就需要我们的`some`⽅法登场了
```
var bool = w.some(item => { return item < 90 })
// true
```
我们的`some`⼩伙计,去西⽠存放的仓库进⾏寻,只要到⼀个符合条件的,就回来报告`true`所以并不会全部遍历,不做多余的活(性能优良)
## 问题:难道全都是体重过轻吗(全符合)
我不信你这全是⼤的 派了个`every`⼩伙计去检查
```
var all = w.every(item => { return item < 90 })
//false
```
`every`对每⼀个元素执⾏⼀个`callback`,直到它到⼀个使 `callback` 返回 `false`的元素(没那么⼤的西⽠),就返回`false`,直到遍历完成也没有返回`false`的话,就返回`true`
## 顾客:给我个⼤西⽠(返回⼀个符合的)
来了⼀个体重⼩于90的我们看看 `find`⾃告奋勇,我去给他
```
var ones = w.find(item => { return item < 90 })
//[80]
复制代码
`find`和`some`很类似,都是寻符合条件的,有⼀个就可以 不过`some`进去搜罗了⼀圈回来报了个“有”(`true`),⽽`find`则把那个西⽠抱了出来(返回第⼀个符合条件的对象)
## 收银员:这西⽠是仓库的第⼏个来着(返回序号)
⽼板卖完准备记录⼀下
“哎,这个⼈是简历是⼏号?” `find`说:“哎呀我光顾着了,没看是第⼏个”
“早知道让`findIndex`跟你⼀起去了”
```
var i = w.findIndex(item => { return item < 90 })
//1
```
当需要知道所需元素的索引,就可以⽤`findIndex`
`findIndex`返回第⼀个符合条件的索引号
这篇⽂章⽤体重的案例,是不是很有趣啊,希望能给⼤家⼀点启发~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。