forEach循环

  • 一旦开始,无法在中间被停止
  • 效率低
const arr = ['工藤新一','服部平次','怪盗基德'];
arr.forEach((item,index)=>{ //循环3次,return也不会起效果
if(item=='工藤新一') {
console.log(index);
}
})

some循环

  • 从数组里找元素,用some循环比较合适
  • 找到对应的项后,通过return true来终止some循环
const arr = ['工藤新一','服部平次','怪盗基德'];
arr.some((item,index)=>{ //循环2次
if(item=='工藤新一'){
console.log(index);
return true; //固定写法
}
})

every循环

  • 判断每一项是否满足需求
const arr = [
{id:1,name:'西瓜',state:true},
{id:2,name:'榴莲',state:true},
{id:3,name:'草莓',state:true}
]
//需求:判断数组中水果是否被全选
const result = arr.every(item => item.state)
//括号里是个箭头函数,其实就是判断的简写
//括号里相当于 arr.every(item => item.state===true)
//如果每一项的state都是true,返回true;只要有一个是false,返回false。

reduce循环

  • 把每次循环的结果累加起来(累加器)
  • 格式:reduce( (累加结果, 当前循环项)=>{} , 初始值 )
  • 每次循环,都要返回当前的累加结果,作为累加结果
  • 返回最后一次循环的累加结果
const arr = [
{id:1,name:'西瓜',state:true,price:10,count:1},
{id:2,name:'榴莲',state:false,price:80,count:2},
{id:3,name:'草莓',state:true,price:20,count:3}
]
//需求:把购物车数组中,已勾选的水果,总价累加出来。
let sum=0;//总价
arr.filter(item => item.state).forEach(item => {
sum += item.price * item.count;
})

//reduce循环
//arr.filter(item => item.state):返回state=true的结果(数组形式)
//reduce( (累加结果, 当前循环项)=>{} , 初始值 )
const result = arr.filter(item => item.state).reduce((totalprice,item)=>{
//第一次循环 totalprice = 0
//第二次循环 totalprice = 返回的结果值
return totalprice += item.price * item.count;
},0) //初始值为0