前言
刚入门的时候我们一般都是从for循环开始的,后面就接触各种循环函数,给我们提供便利的计算,但是工作中常用的有哪些?你都知道他们有什么作用嘛?接下来总结下常用的循环函数every() 、some()、includes()、fliter()、forEach()、map()、for...of、for...in、reduce()、reduceRight()、Object.keys、Object.getOwnPropertyNames的用法
every用法
// let arr1 = [45,5,11,15,22,33]
// let result1 = arr1.every((e)=>{
//判断数组是否有大于5的元素
// return e>5
// })
// console.log(result1) //false
// 作用: 1.如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
//2.如果所有元素都满足条件,则返回 true
// 注意: 1.every() 不会对空数组进行检测。
//2.every() 不会改变原始数组。
some用法
let arr2 = [45,5,11,15,22,33]
let result2 = arr2.some((e)=>{
//判断数组是否有大于5的元素
return e>5
})
console.log(result2) // true
// 作用:1.如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
// 2.如果没有满足条件的元素,则返回false。
// 注意:1.some() 不会对空数组进行检测。
// 2.some() 不会改变原始数组。
includes()用法
let arr3 = [45,5,11,15,22,33]
let result3 = arr3.includes(4)
//判断数组是否有4的元素
console.log(result3)//false
//作用:可以用来判断数组或者字符串中是否有指定的值,有值返回true,没有返回false
//注意:includes() 方法区分大小写。
filter()用法
let arr4 = [45,5,11,15,22,33]
let result4 = arr4.filter((e)=>{
//保留大于15的元素放到新的数组
if (e>15) return e
})
console.log(result4)//[ 45, 22, 33 ]
//作用:返回新的数组把数组的某些元素过滤掉,然后返回剩下的元素,不影响原数组。
//注意:1.filter() 不会对空数组进行检测。
// 2.filter() 不会改变原始数组。
// 3.能返回新的数组
forEach()用法
let arr5 = [45,5,11,15,22,33]
let result5 = arr5.forEach((item,index,data)=>{
//数组内变量为引用类型,遍历参数即为对应项的引用地址
item = item*3
return item
})
console.log(result5)//undefined
console.log(arr5)//[ 45, 5, 11, 15, 22, 33 ]
// 作用:对循环后的数据进行操作存储
// 注意:1.forEach()没有返回值
// 2.对数组或对象进行循环遍历,一旦循环无法停止,除非抛出异常,,可采用将forEach放入try{},catch{},
map()用法
let arr5 = [45,5,11,15,22,33]
let result5 = arr5.map((item,index,data)=>{
//数组内变量为引用类型,遍历参数即为对应项的引用地址
item = item*3
return item
})
console.log(result5)//[ 135, 15, 33, 45, 66, 99 ]
console.log(arr5)//[ 45, 5, 11, 15, 22, 33 ]
// 作用:对循环后返回新的数组进行改变
// 注意:1.map()有返回值
// 2.对数组或对象进行循环遍历,一旦循环无法停止,除非抛出异常,,可采用将map放入try{},catch{},
for...in用法
let arr6 = {a:1,b:2,c:3}
for(key in arr6){
console.log(key)//循环拿到键名
console.log(arr6[key])//循环拿到键值
}
// 作用:一般用来循环对象
// 注意:1.不同于forEach方法,它可以与break、continue和return配合使用
// 2.for...in循环主要是为遍历对象而设计的,不适用于遍历数组。
for...of用法
let arr7 = [ 45, 5, 11, 15, 22, 33 ]
for(value of arr7){
console.log(value)
}
// 作用:一般用来循环对象
// 注意:1.不同于forEach方法,它可以与break、continue和return配合使用
// 2.提供了遍历所有数据结构的统一操作接口。
reduce用法
let arr8 = [ 45, 5, 11, 15, 22, 33 ]
let result8 = arr8.reduce((a,b,c,d)=>{//a是重左开始的第一个值,b是除了a往后的值,c是数组下标,d是原数组
//从第一个值开始计算相加
return a+b
})
console.log(result8)//131
//作用:1.reduce() 可以作为一个高阶函数,用于函数的 compose。
// 2.reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
//注意: reduce() 对于空数组是不会执行回调函数的。
reduceRight用法
`reduceRight`则是从右到左(从最后一个成员到第一个成员),其他和reduce完全一样。
Object.keys用法
let arr9 = {}
Object.defineProperties(arr9,{
a:{enumerable:true,key:1},
b:{enumerable:false,key:2}
})
let result9 = Object.keys(arr9)
console.log(result9)//['a']
//作用:Object.keys的参数是一个对象,返回一个数组,该数组的成员都是该对象自身的(而不是继承的)所有属性名,且只返回可枚举的属性。
Object.getOwnPropertyNames用法
let arr10 = {}
Object.defineProperties(arr10,{
a:{enumerable:true,key:1},
b:{enumerable:false,key:2}
})
let result10 = Object.keys(arr10)
console.log(result10)//[ 'a', 'b' ]
//作用:Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。