js every(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在 JavaScript 开发中,数组操作是日常工作的核心场景之一。无论是数据筛选、条件验证,还是逻辑判断,开发者都需要借助数组方法高效完成任务。在众多数组方法中,every() 是一个容易被低估但功能强大的工具。它能够批量验证数组元素是否全部满足指定条件,在表单校验、数据过滤等场景中发挥关键作用。本文将通过循序渐进的讲解、生动的比喻和实用案例,帮助读者彻底掌握 js every 方法的用法与技巧。


一、什么是 every() 方法?

every() 是 JavaScript 数组原生提供的遍历方法,其核心功能是检查数组中的所有元素是否全部符合指定条件。如果所有元素都满足条件,则返回 true;只要有一个元素不满足条件,立即返回 false

我们可以将 every() 比喻为“班级作业检查员”:

  • 老师(即 every() 方法)会逐个检查班级中每个学生(数组元素)是否完成了作业(满足条件)。
  • 只有当所有学生都交了作业时,老师才会宣布“全班完成任务”(返回 true)。
  • 如果发现哪怕一个学生没交作业,检查会立即终止,直接给出“未达标”结果(返回 false)。

二、every() 方法的基本语法与参数

1. 基础语法

array.every(callback(element[, index, array]), thisArg);
  • callback:用于判断每个元素是否满足条件的函数。
  • element:当前被检查的数组元素。
  • index(可选):当前元素的索引位置。
  • array(可选):调用 every() 的原始数组。
  • thisArg(可选):执行 callback 时绑定的 this 值。

2. 参数详解

(1)callback 函数的返回值

callback 必须返回一个布尔值(truefalse)。如果返回值为 true,表示当前元素满足条件;若返回 false,则终止遍历并直接返回 false

(2)thisArg 参数的作用

当需要在 callback 内部使用外部对象的上下文时,可以通过 thisArg 指定 this 的指向。例如:

const criteria = { minAge: 18 };
const isValid = users.every(function(user) {
    return user.age >= this.minAge;
}, criteria);  

此处 thisArgthis 绑定到 criteria 对象,确保 this.minAge 可以正确引用外部数据。


三、every() 的核心逻辑与执行流程

1. 执行流程图解

开始 → 遍历数组第一个元素 → 执行 callback → 判断返回值是否为 true  
是 → 继续遍历下一个元素  
否 → 立即返回 false,终止遍历  
重复直到所有元素检查完毕 → 返回 true  

2. 与 for 循环的对比

假设我们要检查数组中所有元素是否大于 10,用 every() 实现:

const numbers = [12, 15, 8, 20];  
const result = numbers.every(num => num > 10);  
// result 为 false(因为第三个元素 8 不满足条件)  

而用 for 循环实现则需要手动控制循环和条件判断:

let allValid = true;  
for (let i = 0; i < numbers.length; i++) {  
    if (numbers[i] <= 10) {  
        allValid = false;  
        break;  
    }  
}  

显然,every()简洁性可读性远超手动循环。


四、every() 的典型应用场景

1. 表单数据校验

在用户提交表单前,需确保所有输入字段都符合格式要求。例如,检查邮箱输入框是否非空且格式正确:

const formFields = [  
    { name: "email", value: "test@example.com" },  
    { name: "phone", value: "1234567890" },  
    { name: "age", value: "25" }  
];  

const isValid = formFields.every(field => {  
    return field.value.trim() !== "" && field.value.length >= 5;  
});  

2. 数据过滤与聚合

当需要批量验证数据是否符合业务规则时,every() 可快速返回结果:

// 检查购物车中所有商品单价是否不超过 100 元  
const cartItems = [99, 89.9, 105];  
const isWithinBudget = cartItems.every(price => price <= 100);  
// 返回 false(第三个元素 105 不满足条件)  

3. 配合其他方法链式调用

every() 可与其他数组方法(如 map()filter())结合使用,构建更复杂的逻辑:

// 先过滤出价格大于 50 的商品,再检查是否全部库存充足  
const filteredItems = products  
    .filter(p => p.price > 50)  
    .every(p => p.stock >= 10);  

五、进阶技巧与常见误区

1. 隐式类型转换的风险

callback 返回非布尔值(如数字或字符串),JavaScript 会自动进行类型转换。例如:

const result = [1, 2].every(num => num % 2);  
// 返回 false,因为 2 % 2 = 0(会被转为 false)  

此时应显式返回布尔值:

const result = [1, 2].every(num => num % 2 === 1); // 正确写法  

2. 空数组的特殊处理

若传入空数组,every() 会直接返回 true。例如:

[].every(() => false) // 返回 true  

这类似于“全班没有学生,自然所有学生都完成了作业”的逻辑。

3. 与 some() 方法的区别

方法作用返回条件
every()验证所有元素是否满足条件全部满足 → true
some()验证至少一个元素是否满足条件存在满足 → true

比喻

  • every() 是“全勤奖”:所有人都到齐才能发奖。
  • some() 是“参与奖”:只要有一个人参与,就能发奖。

六、实际案例:实现复杂条件判断

假设需要验证用户输入的手机号是否满足以下条件:

  1. 长度为 11 位;
  2. 131518 开头;
  3. 包含至少一个偶数。

通过 every() 和其他方法的组合,可以高效实现:

function validatePhone(phone) {  
    const digits = phone.split("").map(Number);  
    return [  
        digits.length === 11,  
        ["13", "15", "18"].includes(phone.slice(0, 2)),  
        digits.some(num => num % 2 === 0)  
    ].every(Boolean); // 将数组元素转为布尔值并全量检查  
}  

console.log(validatePhone("13812345678")); // true  
console.log(validatePhone("13a12345678")); // false(包含非数字字符)  

此案例展示了 every()组合多个条件验证时的强大能力。


结论

js every 方法通过简洁的语法和直观的逻辑,成为 JavaScript 开发中处理数组条件验证的核心工具。无论是基础的元素检查,还是复杂的数据校验,开发者都可以通过 every() 以更少的代码实现更清晰的逻辑。

掌握 every() 的关键在于理解其“全量满足即通过”的核心思想,并结合实际场景灵活运用。建议读者通过以下方式深化理解:

  1. 尝试用 every() 重构现有代码中的 for 循环;
  2. 设计包含多个条件的验证函数,观察 every() 的执行流程;
  3. 对比 every()some()filter() 等方法的差异与协同。

通过实践与思考,开发者将能充分挖掘 js every 的潜力,提升代码质量和开发效率。

最新发布