本文详细解析JavaScript中every()与some()两个数组方法的核心区别。every()要求所有元素满足条件才返回true,否则立即短路返回false;some()则只要有一个元素满足条件即返回true。通过Vue表格状态判断的实战代码,展示了如何利用这两个方法高效处理批量数据的状态校验逻辑。
本文主要探讨JavaScript中every()与some()两个数组方法的具体差异及其实际应用场景。
every()方法详解
every()方法用于判断数组中的每一个元素是否都满足指定的测试条件,该条件由传入的回调函数定义。
执行机制上,every()会遍历数组中的每个元素,并调用指定的测试函数进行判断。
- 一旦检测到某个元素不满足条件,方法将立即返回false,且不再对剩余元素进行后续检测。
- 只有当数组中所有元素均通过测试时,every()才会返回true。
需要注意的是,如果数组为空,every()方法不会执行回调函数,直接返回true。
此外,every()方法在执行过程中不会修改原始数组。
isEvery:function(){
let a = [2,3,5,7,9]
let status = a.every(function(currentValue,index,arr){
console.log(currentValue) // 必须。当前元素的值
console.log(index) // 可选。当前元素的索引值
console.log(arr) // 可选。当前元素属于的数组对象
return currentValue >= 1 // 判断数组中是否所有值都大于等于1
})
console.log(status)
}
// currentValue:2
// index:0
// arr:2,3,5,7,9,
// currentValue:3
// index:1
// arr:2,3,5,7,9,
// currentValue:5
// index:2
// arr:2,3,5,7,9,
// currentValue:7
// index:3
// arr:2,3,5,7,9,
// currentValue:9
// index:4
// arr:2,3,5,7,9,
// status:true参数说明
function(currentValue, index,arr){
// currentValue 必须。当前元素的值
// index 可选。当前元素的索引值
// arr 可选。当前元素属于的数组对象
// 布尔值。如果所有元素都通过检测返回 true,否则返回 false。
}some()方法详解
some()方法用于检测数组中是否存在至少一个元素满足指定的测试条件,条件同样由回调函数提供。
执行机制上,some()会依次遍历数组元素,对每个元素执行测试函数。
- 只要发现有一个元素满足条件,方法立即返回true,并停止对剩余元素的检测。
- 若遍历完所有元素均未找到满足条件的项,则返回false。
同样地,如果数组为空,some()方法不会执行回调函数,直接返回false。
some()方法在执行过程中也不会修改原始数组。
isSome:function(){
let a = [2,3,5,7,9]
let status = a.some(function(currentValue,index,arr){
console.log(currentValue) // 必须。当前元素的值
console.log(index) // 可选。当前元素的索引值
console.log(arr) // 可选。当前元素属于的数组对象
return currentValue >= 1 // 判断数组中是否有值大于等于1
})
console.log(status)
}
// currentValue:2
// index:0
// arr:2,3,5,7,9
// true参数说明
function(currentValue, index,arr){
// currentValue 必须。当前元素的值
// index 可选。当前元素的索引值
// arr 可选。当前元素属于的数组对象
// 布尔值。如果所有元素都通过检测返回 true,否则返回 false。
}核心区别对比
every()会检查数组中的currentValue(当前值),只有当所有元素都满足条件时才返回true;而some()只需有一个currentValue满足条件即返回true,后续元素不再进行比较。
应用场景示例
如图表所示,利用every()和some()来判断表格的选中状态。当选中单条数据时,判断其当前状态;当选中多条数据时,综合判断其整体状态。

Vue代码实现
data() {
return {
statusDes:''
}
},
methods:{
handleSelectionChange:function(val){
const statusList = [] //定义数组,保存每一项状态
val.forEach((item) =>{
// 遍历选择的项,把状态保存到数组
statusList.push(item.status)
})
// every()会遍历每一个状态,当全部满足条件时,才返回true
this.statusDes = statusList.every(this.isAllQuery)
// some()会遍历状态,只要一个满足,就返回true
// this.statusDes = statusList.some(this.isAllQuery)
},
// 过滤状态,即当状态显示:”是“时,返回true
isAllQuery(status){
return status === '是'
},
changes:function(){
if(this.statusDes){
this.$alert('是', '成功状态', { confirmButtonText: '确定', type: 'success' })
}else {
this.$alert('否', '失败状态', { confirmButtonText: '确定', type: 'warning' })
}
},
isTrue(value){
return value >=1
}
}结果分析
使用every()全选且状态不一致时:


使用some()全选且状态不一致时:

本文介绍了JavaScript中every()与some()的区别和应用,更多相关js every()与some()的区别内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!