一般遍历数组的方法有:
forEach()、for、for...of()、for...in()、map()、filter()、every()、some()、find()、findIndex()、reduce()、reduceRight()
forEach()
forEach()方法会对每一个元素执行提供的函数,对数据的操作会改变原数组,该方法没有返回值;
forEach语法:
[ ].forEach((item,index,array)=>{})
第一个参数是遍历的数组内容;
第二个参数是对应的数组索引;
第三个参数是数组本身
举例:
var arr = [1,2,3,4,5];
arr.forEach(item => {
console.log(item)
})
//等价于:
for (var i =0 ;i < arr.length;i++){
console.log(arr[i])
}
注意点:
- forEach不支持 break操作,使用break会导致报错;
- forEach中使用return不会报错,但return不会生效;
for循环
在javaScript中,for循环是一种常见的控制结构,用于重复执行一段代码。它通常用于遍历数组、列表或其他可迭代对象中的元素。
for ... in循环:用于遍历对象的属性(索引)(对数组或者对象的属性进行循环操作)
for ... of循环:用于遍历可迭代对象的元素(不能用于对象循环)
//for循环
const arr =[11,12,13,14,15]
for(let i= 0; i<arr.length; i++){
console.log(arr[i])
}
//for...in
const arr =[11,12,13,14,15]
for(let i in arr){
console.log(arr[i])
}
//for...of
const arr =[11,12,13,14,15]
for( let i of arr){
console.log(i)
}
map()
map方法是数组的一个方法,会返回一个新数组,新数组的元素为原始数组元素调用函数处理后的return返回值。
不会对空数组进行检测,不会改变原始数组
let arr = [11,12,13,14,15];
let doubled = arr.map((v,i,array) => v *2);
console.log(arr) // [11, 12, 13, 14, 15]
console.log(doubled) //[22, 24, 26, 28, 30]
filter()
用于对数组进行过滤,会返回一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
[ ].filter((item,index,array)=>{})
第一个参数是遍历的数组内容;
第二个参数是对应的数组索引;
第三个参数是数组本身
const arr =[1,2,3,4,5];
let num = arr.filter(v => v>2);
console.log(arr) //[1, 2, 3, 4, 5]
console.log(num) //[3, 4, 5]
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
arr.filter(item=>{ return item.name}) //如下图所示
//混合用法
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
let newArr = arr.filter(item=> Number(item.age) < 50 ).map(it => { return it.name}) console.log(newArr) // ['张三', '王五']
every()
返回一个boolean,判断每个元素是否符合条件,数组里面所有的元素都符合才返回true.
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
let value = arr.every(v => v.name)
console.log(value) //false
some()
返回一个boolean,判断每个元素是否符合条件,数组里面所有的元素里有一个符合条件就返回true.
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
let value = arr.some(v => v.name)
console.log(value) //true
find()
是在数组中找到第一个符合条件的元素
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
let value = arr.find(v => v.name)
console.log(value) //{name: '张三', age: '20'}
findIndex()
返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1
const arr = [10,15,19,33];
let value = arr.findIndex(v => v>20);
console.log(value) //3
reduce()
接收一个函数作为累加器,数组中的每个值(从左到右)开始合并,最终为一个值
语法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
回调函数接收四个参数
- 参数1:必需,初始值,或者计算结束后的返回值
- 参数2:必需,当前元素
- 参数3:可选,当前元素索引
- 参数4:可选,当前元素所属的数组对象。
const arr = [10,15,19,33]
let value = arr.reduce((prev,next) =>{
return prev + next
})
console.log(value) //77
const arr = [
{name:'张三',age:'20'},
{name:'',age:"50"},
{name:'王五',age:'20'},
]
let value = arr.reduce((prev,next) =>{
return prev + Number(next.age)
},0)
console.log(value) //90
reduceRight()
和reduce方法类似,但是从右到左,也就是从数组的最后一个元素开始,向前合并
const arr = [10,15,19,33]
let value = arr.reduceRight((prev,next) =>{
return prev + next
})
console.log(value) //77