文章目录
- [Vue]常见的循环处理数组方法:`forEach` `some` `map` `filter` `every` `find`等方法
- Array.forEach(callback)
- Array.some(callback)
- Array.every(callback)
- Array.map(callback)
- Array.find(callback)
- Array.filter(callback)
[Vue]常见的循环处理数组方法:forEach
some
map
filter
every
find
等方法
Array.forEach(callback)
千万注意:forEach() 方法对于空数组是不会执行回调函数的
forEach()方法用于遍历数组中的每一个元素,并将元素传给回调函数,注意:forEach()中是不支持使用break来中途跳出循环和不支持return操作输出,return只能用于控制循环是否跳出当前循环
语法:
let arr=[1,2,3,4,5,6,7]arr.forEach((item,index,arr)=>{console.log(item,index,arr)})输出:1 0[1, 2, 3, 4, 5, 6, 7]2 1[1, 2, 3, 4, 5, 6, 7]3 2[1, 2, 3, 4, 5, 6, 7]4 3[1, 2, 3, 4, 5, 6, 7]5 4[1, 2, 3, 4, 5, 6, 7]6 5[1, 2, 3, 4, 5, 6, 7]7 6[1, 2, 3, 4, 5, 6, 7]
回调有三个参数: item:遍历的数组内容 index:对应的数组索引 arr:数组本身
forEach方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改
let arr=[1,2,3,4,5,6,7]let result = arr.forEach((item,index,arr)=>{ // 通过item不能改变原数组 if(item==2){ item=1 }})console.log('arr:'+arr)console.log('result:'+result)输出:arr:1,2,3,4,5,6,7result:undefined
但是可以通过数组的索引值来修改原数组的值
let arr=[1,2,3,4,5,6,7]let result = arr.forEach((item,index,arr)=>{// 通过数组索引值来修改原数组的值if(item==2){arr[index]=20}})console.log('修改后的arr:'+arr)输出:修改后的arr:1,20,3,4,5,6,7
总结:
forEach() 方法对于空数组是不会执行回调函数的
forEach()方法是没有返回值的
不支持使用break来中途跳出循环和不支持return操作输出,return只能用于控制循环是否跳出当前循环
可以通过数组的索引值来修改原数组的值
回调有三个参数:item:遍历的数组元素 index:当前遍历的数组元素的索引值 arr:遍历的数组本身
Array.some(callback)
**some()**是Vue 中的一个常用方法,它接收一个回调函数,回调函数接收三个参数:item当前元素、index当前索引、arr数组本身,注意:当有一个元素满足回调函数的条件时,some方法返回true,否则返回false
some方法找到符合条件的便会终止,否则将会遍历整个数组
注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组
语法:
let arr=[1,2,3,4,5,6,7]arr.some((item,index,arr)=>{})
若数组中的对象只要有一个对象复合条件就返回true , 剩余的元素不会再执行检测
,全部对象都不符合条件才返回false
let arr=[{name:'小红',age:28,},{name:'小蓝',age:25,},{name:'小绿',age:29,},{name:'小白',age:27,},]let result = arr.some((item,index,arr)=>{return item.age>30})console.log(result)输出:false//所有对象都不符合就返回false
let arr=[{name:'小红',age:28,},{name:'小蓝',age:25,},{name:'小绿',age:29,},{name:'小白',age:27,},]let result = arr.some((item,index,arr)=>{console.log(item)return item.age>28})console.log(result)输出:{name: '小红', age: 28}{name: '小蓝', age: 25}{name: '小绿', age: 29}true//当有一个元素满足回调函数条件时,数组就返回true,然后终止遍历,后续元素将不继续遍历,如程序中的小白就没有遍历
总结:
some方法找到符合条件的便会终止,否则将会遍历整个数组
当数组中有一个元素满足条件即返回true,所有对象都不符合就返回false
Array.every(callback)
every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true。
注意: every() 不会对空数组进行检测。
注意: every() 不会改变原始数组
语法:
let arr=[1,2,3,4,5,6,7]arr.every((item,index,arr)=>{})
当所有元素都满足条件返回true
let arr=[{name:'小红',age:28,},{name:'小蓝',age:25,},{name:'小绿',age:29,},{name:'小白',age:27,},]let result = arr.every((item,index,arr)=>{console.log(item)return item.age>20})console.log(result)输出:true
当检测到有元素不满足时,返回false,循环终止,后续元素不再遍历
let arr=[{name:'小红',age:28,},{name:'小蓝',age:25,},{name:'小绿',age:29,},{name:'小白',age:27,},]let result = arr.every((item,index,arr)=>{console.log(item)return item.age>26})console.log(result)输出:age: 28 name: "小红"age: 25 name: "小蓝"false//检测到小蓝不满足条件,所以后续的小白和小绿就没有遍历
总结:
- 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
- 如果所有元素都满足条件,则返回 true
Array.map(callback)
.map()方法的返回值为新的数组,组中的元素为原始数组元素调用函数处理后的值
map()
按照原始数组元素顺序依次处理元素
注意:
map()
不会对空数组进行检测。map()
不会改变原始数组。
语法:
let arr=[1,2,3,4,5,6,7]let newArr = arr.map((item,index,arr)=>{})
.map()方法的返回值为一个新的数组
假设你的数据为:
{name: '小红',age: 28,},{name: '小蓝',age: 25,},{name: '小绿',age: 29,},{name: '小白',age: 27,},
但是前端想要使用的数据类型为
{name: '小红'},{name: '小蓝'},{name: '小绿'},{name: '小白'},
这时候就可以用map()方法遍历原数组,返回一个新数组,组中的元素为原始元素调用函数后得到的结果
let arr = [{name: '小红',age: 28,},{name: '小蓝',age: 25,},{name: '小绿',age: 29,},{name: '小白',age: 27,},]let newArr = arr.map((item, index, arr) => {return {name:item.name}})console.log(newArr)
得到的结果:
总结:
- .map()方法有返回值,返回的是一个新的数组
- 遍历原数组的所有元素
- 新数组的元素为原始元素调用函数后得到的结果
Array.find(callback)
find() 方法==返回通过测试(函数内判断)的数组的第一个元素的值==
find() 方法为数组中的每个元素都调用一次函数执行:
- 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回 undefined
注意:
find() 对于空数组,函数是不会执行的。
find() 并没有改变数组的原始值。
语法:
let arr=[1,2,3,4,5,6,7]let res = arr.map((item,index,arr)=>{})
假如要选出数组中第一个大于8的数
let arr = [1,0,8,92,3,65,48,2,100]let result = arr.find((item, index, arr) => {return item>8})console.log(result)输出:92//返回数组中第一个符合条件的元素,之后的值将不继续遍历
总结:
- find()方法返回通过测试(函数内判断)的数组的第一个元素的值
- 若数组中无满足条件的元素,则返回undefined
- 获取到满足条件的元素后,后续的元素将不继续遍历
Array.filter(callback)
.filter()用于把数组的某些元素的筛选,然后返回剩下的元素
不会改变原数组,返回值是一个新的数组
新数组的数据是满足return条件的原数组数据
语法:
let arr=[1,2,3,4,5,6,7]let res = arr.filter((item,index,arr)=>{})
假设原数据为
let arr = [1,0,8,92,3,65,48,2,100]
需要提取数组中大于10的数据
let arr = [1,0,8,92,3,65,48,2,100]let result = arr.filter((item, index, arr) => {return item>10})console.log(result)输出:[92, 65, 48, 100]
总结:
- filter()返回值是一个新的数组
- 新的数组的元素是满足回调函数条件而筛选出来的原数组元素
- 不会改变原数组的数据
.forEach() | .some() | .every() | .map() | .find() | .filter() | |
---|---|---|---|---|---|---|
使用场景 | 没有返回值,可以通过索引修改原函数的数据,遍历所有数据 | 返回值是一个布尔值,找到符合条件的就会终止遍历,否则就遍历整个数组 | 返回值是一个布尔值,找到不符合条件的就停止遍历,否则就遍历整个数组(与some()相反) | 返回值是一个新的数组,新数组的元素取决于.map()方法的回调函数返回 | 返回通过测试(函数内判断)的数组的第一个元素的值 | 返回值是一个新的数组,新的数组的元素是满足回调函数条件而筛选出来的原数组元素 |
循环次数 | 数组的长度 | 小于等于数组的长度 | 小于等于数组的长度 | 数组的长度 | 小于等于数组的长度 | 数组的长度 |
执行结果 | 没有返回值,return只是用来跳过当前循环 | 找到满足条件的就返回true,否则就遍历整个数组返回false | 找到不满足条件的就返回true,否则就遍历整个数组返回false | 新数组的数据是.map()callback函数的return返回结果 | 返回的数据是原数组中第一个满足条件的元素,若原数组中的所有元素都不满足,则返回undefined | 返回一个新数组,数组的元素是满足回调条件的所有原数组数据 |