通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)

简介: array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~


image.gif 编辑

一、array.every()的使用与技巧

1.1、基本语法

arr.every(callback(currentValue, index, array), thisArg)

       callback:一个函数,它最多接受三个参数(当前元素的值、当前元素的索引、原数组)。

  • currentValue:当前被遍历的元素。
  • index:当前元素的索引。
  • array:调用 every 方法的数组。

       thisArg(可选):执行回调函数时的 this 上下文。

1.2、返回值

       一个布尔值,表示所有元素是否都满足条件。

1.3、使用技巧

       array.every()用于检验数组中所有元素是否都满足某一要求。

       应用场景:数据验证、权限检查、一致性检查。

1.3.1、数据验证

       开发一个用户注册系统,需要验证用户提供的所有信息是否有效。用户对象可能包含姓名、邮箱、密码和密码确认等字段,需要验证用户注册信息是否合法,比如检查用户名的长度、密码的强度和匹配性,还可以通过正则表达式来验证邮箱格式的正确性。

//假设我们正在开发一个用户注册系统,需要验证用户提供的所有信息是否有效。用户对象可能包含姓名、邮箱、密码和密码确认等字段。
const users = [
  {
    name: "John Doe",
    email: "john.doe@example.com",
    password: "securepassword123",
    confirmPassword: "securepassword123"
  },
  {
    name: "Jane Smith",
    email: "jane.smith@example.com",
    password: "password",
    confirmPassword: "password"
  },
  {
    name: "Emily Jones",
    email: "emily.jones@example.com",
    password: "SafePass123!",
    confirmPassword: "SafePass123!"
  },
  {
    name: "William Brown",
    email: "william.brown@example.com",
    password: "pass123",
    confirmPassword: "pass1234" // 注意这里的不匹配
  },
  {
    name: "Sophia Lee",
    email: "sophia.lee@example.com",
    password: "mysecurepassword",
    confirmPassword: "mysecurepassword"
  },
  // ... 可以根据需要继续添加更多用户对象
];
const allValid = users.every(user => {
  const { name, email, password, confirmPassword } = user;
  const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
  return (
    name.length >= 3 && // 假设用户名至少需要3个字符
    password.length >= 8 && // 密码至少8个字符
    password === confirmPassword && // 密码和确认密码匹配
    emailRegex.test(email) // 邮箱格式正确
  );
});
console.log(allValid); // 如果所有用户信息都有效,输出 true;否则输出 false。

image.gif

1.3.2、权限检查

       在权限系统中,有时需要检查一组用户是否都具有特定的系统管理员权限。检查数组中的每个用户是否具有“admin”角色。这可以用于确保只有具有管理员权限的用户才能访问特定的系统功能。

//在权限系统中,我们可能需要检查一组用户是否都具有特定的系统管理员权限。
const users = [
  { username: "john", roles: ["admin", "user"] },
  { username: "jane", roles: ["admin", "editor"] },
  { username: "dave", roles: ["user"] }, // 只有用户角色,没有管理员权限
  { username: "sarah", roles: ["admin", "user", "editor"] },
  { username: "michael", roles: ["editor"] }, // 只有编辑角色
  { username: "olivia", roles: ["admin"] },
  { username: "liam", roles: ["user", "editor"] }, // 缺少管理员角色
  // ... 其他用户对象
];
const allAdmins = users.every(user => {
  return user.roles.includes("admin");
});
console.log(allAdmins); // 如果所有用户都是管理员,输出 true;否则输出 false。

image.gif

1.3.3、一致性检查

       在处理数据导入功能时,有时需要验证导入的数据是否符合预定义的结构。每个数据项可能是一个对象,包含多个属性,如日期、金额和描述。

//假设我们正在处理一个数据导入功能,需要验证导入的数据是否符合预定义的结构。每个数据项可能是一个对象,包含多个属性,如日期、金额和描述。
const dataEntries = [
  { date: "2024-01-01", amount: 100.00, description: "Payment for services" },
  { date: "2024-01-02", amount: 200.00, description: "Purchase of goods" },
  { date: "2024-01-03", amount: -50.00, description: "Refund for order" }, // 负数金额
  { date: "01/01/2024", amount: 300.00, description: "Invalid date format" }, // 日期格式错误
  { date: "2024-01-05", amount: "350.00", description: "Amount as string" }, // 金额为字符串类型
  { date: "2024-01-06", amount: 400.00, description: "" }, // 描述为空字符串
  { date: "2024-01-07", amount: 500.00, description: null }, // 描述为null
  { date: "2024-01-08", amount: 600.00, description: undefined }, // 描述为undefined
  // ... 其他数据项
];
const allConsistent = dataEntries.every(entry => {
  const { date, amount, description } = entry;
  const dateRegex = /^\d{4}-\d{2}-\d{2}$/; // 日期格式 YYYY-MM-DD
  return (
    typeof date === "string" && dateRegex.test(date) && // 日期格式正确
    typeof amount === "number" && !isNaN(amount) && amount > 0 && // 金额是正数
    typeof description === "string" && description.trim().length > 0 // 描述不为空
  );
});
console.log(allConsistent); // 如果所有数据项都符合格式,输出 true;否则输出 false。

image.gif

二、array.every()与array.some()

2.1、相同之处

       它们都接受一个回调函数,该函数会被依次应用于数组的每个元素,返回值都是布尔值。

2.2、不同之处

       目的:array.every()用于检查数组中的所有元素是否都满足某个条件,如果有一个不满足都会返回false;array.some()用于检查数组中是否至少有一个元素满足某个条件,只要有一个满足,就会返回true。

       短路时机:array.every()只要有一个元素不符合回调函数条件,就会触发短路机制;array.some()只要有一个元素符合回调函数条件,就会触发短路机制。合理的运用短路机制,能大大提升数组检查的效率。

       我之前写过array.some()的介绍博客,我个人用array.some()更多,传送门:通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)-CSDN博客

三、总结

       array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。

       W3school传送门(我的博客更详细):JavaScript Array every() 方法

       博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

相关文章
|
8月前
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
469 133
|
8月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
431 69
|
5月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
240 0
|
7月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
679 0
|
4月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
301 3
|
7月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
817 80
|
5月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
244 0
|
6月前
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
8月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
226 3