1.arr.findIndex 查找元素 返回值为符合条件的下标 或 -1
2.arr.filter 过滤元素 返回一个新数组
const arr = [
{ name: "小黑", age: 18,gender:'男' },
{ name: "小红", age: 22,gender:'女' },
{ name: "小绿", age: 18,gender:'女' },
{ name: "小蓝", age: 19,gender:'男' },
{ name: "小黄", age: 22,gender:'男' }
]
/* 1.filter应用场景:用于筛选数组中满足条件的元素,返回筛选后的新数组 不影响元数组
2.注意点:
2.1. 回调函数执行次数 == 数组长度
* 数组中有多少个元素,回调函数就会执行几次
2.2. filter函数返回的新数组长度 != 原数组长度
2.3. 回调函数一定要return, 返回一个布尔类型值
结果为true: 当前遍历的元素就会添加到新数组中
结果为false:当前遍历的元素不会添加到新数组中
*/
/*
写法: 箭头函数 arr.filter((元素,下标)=>{return true/false})
普通函数 arr.filter(function(元素,下标){{return true/false })
*/
// 找出性别为男的元素
// 完整写法
const newArr=arr.filter((item,index)=>{
if(item.gender==='男'){
return true
}else{
return false
}
})
console.log(newArr);
// 新数组为 [ { name: "小黑", age: 18,gender:'男' },{ name: "小蓝", age: 19,gender:'男' }, { name: "小黄", age: 22,gender:'男' }]
// 简写
const newArr1 = arr.filter(item=>item.gender==="女")
console.log(newArr1);
// 新数组为 [ { name: "小红", age: 22,gender:'女' },{ name: "小绿", age: 18,gender:'女' }]
3.arr.reduce 方法
const arr = [
{ name: "小黑", age: 18,gender:'男',results:90},
{ name: "小红", age: 22,gender:'女',results:95 },
{ name: "小绿", age: 18,gender:'女',results:88 },
{ name: "小蓝", age: 19,gender:'男',results:75 },
{ name: "小黄", age: 22,gender:'男',results:100 }
]
/*
1.数组reduce方法
1.1 作用 : 遍历数组元素,为每一个元素执行一次回调函数
1.2 语法 : arr.reduce( (sum,item,index)=>{ return sum + item },0)
参数: 第一个是回调函数 第二个是回调函数里面的第一个形参sum的初始值
返回值: 最后一次的sum的值
1.3 应用场景 : 数组求和/平均值等等
1.4 注意点:最好给一个初始值,避免空数组报错
*/
// 数组求和
//sum : 初始值,默认为数组第一个元素
//item : 数组得每一个元素,默认为数组第二个元素
// index : 当前item的下标,默认为1
// 如果给sum设置初始值 value就会从数组的一个元素开始 index也会从0开始
// 求 数组里面性别
const s=arr.reduce((sum,item,index)=>{
if(item.gender==='男'){
return sum+item.results //或sum+=item.results 但都是一样的
}
// if外面也得写return sum 因为reduce 是遍历数组的所有元素
// 如果当前元素不满足判断,没有进入if 不返回sum的话 就会默认返回undefined 此时sum的值就为undefined,
// 下次满足条件时 返回的 return item.results+sum 就会是NaN 因为undefined+数字就是NaN了
return sum
},0)
console.log(s); //结果是265
4.arr.map方法
const arr = [
{ name: "小黑", age: 18,gender:'男',results:90},
{ name: "小红", age: 22,gender:'女',results:95 },
{ name: "小绿", age: 18,gender:'女',results:88 },
{ name: "小蓝", age: 19,gender:'男',results:75 },
{ name: "小黄", age: 22,gender:'男',results:100 }
]
/*
1.数组map方法
1.1 作用 : 遍历每一个元素,并对每一个元素做对应的处理,返回一个新数组
1.2 语法 : arr.map((item,index)=>{ return item },)
2.注意点:
2.1. 回调函数执行次数 == 数组长度
* 数组中有多少个元素,回调函数就会执行几次
2.2. map函数返回的新数组长度 == 原数组长度
2.3. 回调函数中一定要return,返回的是当前遍历的元素值
* 如果不return,新数组中每一个元素都变成了undefined
*/
const newarr= arr.map((item,index)=>{
//给数组里面的对象加一个属性名为id
return {...item,id:index+1} //...为展开运算符 遍历出所有元素
})
console.log(newarr);
5.arr.foreach()方法
const arr = [
{ name: "小黑", age: 18,gender:'男',results:90},
{ name: "小红", age: 22,gender:'女',results:95 },
{ name: "小绿", age: 18,gender:'女',results:88 },
{ name: "小蓝", age: 19,gender:'男',results:75 },
{ name: "小黄", age: 22,gender:'男',results:100 }
]
/*
1.forEach应用场景:用于遍历数组,相当于for循环另一种写法
2.注意点:
2.1. 回调函数执行次数 == 数组长度
数组中有多少个元素,回调函数就会执行几次
2.2. forEach函数没有返回值
2.3. 回调函数不需要return
就算手动return,也无法停止函数
*/
arr.forEach((item,index)=>{
console.log(`${item.name}的成绩:${item.results}`)
})