some()与every()都是js中数组的迭代方法,结果都返回一个布尔值。
some():对数组中每一项运行给定函数,如果该函数对任一项返回true,则结果返回true。
every():对数组中每一项运行给定函数,如果该函数对每一项返回true,则结果返回true。
煮两个栗子帮忙大家消化一下:
1、你哪怕只抓住了一次机会,都不会活成我们村的树哥。
// 人生中的几次机遇
const life = [
  {
    opportunity: '金榜题名',
    status: false
  },
  {
    opportunity: '彩票中大奖',
    status: false
  },
  {
    opportunity: '贵人相助',
    status: true
  },
  ...
]
let success = life.some(v => v.status)
if (success) {
  console.log('小伙子,有前途!')
}
// 执行结果:小伙子,有前途!2、好迪真好,大家好才是真的好,广州好迪。
// 对好迪洗发水的使用评价
const test = [
  {
    name: '李玟',
    say: '好'
  },
  {
    name: '成龙',
    say: '好'
  },
  {
    name: 'C罗',
    say: '好'
  },
  ...
]
let good = test.every( v => v.say === '好')
if (good) {
  console.log('大家用了都说好!')
}
// 执行结果:大家用了都说好!最近《隐秘的角落》很火,看过的朋友应该秒懂下面的图吧,哈哈哈哈。

回来说正事,一个年级有若干个班,每个班有若干同学,通过将some()和every()组合使用,很容易实现以下逻辑:
1、some(every()):全年级,只要有一个班能在数学考试中全员及格,数学老师就带大家去爬山。
let flag = classes.some(c => c.students.every(s => s.grade >= 60));
if (flag) {
  console.log('数学老师带大家去爬山!');
}2、some(some()):全年级,只要有一位同学能在高考中考上清华,学校就会开表彰大会。
let flag = classes.some(c => c.students.some(s => s.university === '清华大学'));
if (flag) {
  console.log('学校会开表彰大会!');
}3、every(some()):全年级,每个班只要有一位学生会打篮球,篮球赛就能如期举行。
let flag = classes.every(c => c.students.some(s => s.basketball === true));
if (flag) {
  console.log('高三年级篮球赛可以如期举行!');
}4、every(every()):全年级,如果所有学生都不在教室,那一定是放假了。
let flag = classes.every(c => c.students.every(s => s.location !== '教室'));
if (flag) {
  console.log('一定是放假了!');
}5、只要有一个栗子让你“消化”本文知识了,你就……
let flag = city.some(c => c.people.some(p => p.understand === true));
if (flag) {
  console.log('点个小心心呗~');
}9+			
0 条评论