通过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: "[email protected]",
    password: "securepassword123",
    confirmPassword: "securepassword123"
  },
  {
    name: "Jane Smith",
    email: "[email protected]",
    password: "password",
    confirmPassword: "password"
  },
  {
    name: "Emily Jones",
    email: "[email protected]",
    password: "SafePass123!",
    confirmPassword: "SafePass123!"
  },
  {
    name: "William Brown",
    email: "[email protected]",
    password: "pass123",
    confirmPassword: "pass1234" // 注意这里的不匹配
  },
  {
    name: "Sophia Lee",
    email: "[email protected]",
    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() 方法

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

相关文章
|
3月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
233 69
|
3月前
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
152 43
|
1月前
|
JavaScript 前端开发 算法
流量分发代码实战|学会用JS控制用户访问路径
流量分发工具(Traffic Distributor),又称跳转器或负载均衡器,可通过JavaScript按预设规则将用户随机引导至不同网站,适用于SEO优化、广告投放、A/B测试等场景。本文分享一段不到百行的JS代码,实现智能、隐蔽的流量控制,并附完整示例与算法解析。
55 1
|
2月前
|
JavaScript 前端开发
怀孕b超单子在线制作,p图一键生成怀孕,JS代码装逼娱乐
模拟B超单的视觉效果,包含随机生成的胎儿图像、医疗文本信息和医院标志。请注意这仅用于前端开发学习
|
2月前
|
前端开发
医院检查单子p图软件,在线制作仿真病历,js+css+html装逼神器
本示例展示如何用HTML/CSS创建医疗信息页面,内容仅供学习参考。页面模拟“阳光医院体检中心”场景,提供预约功能验证(如姓名、手机号、日期)。所有数据仅用于演示
|
3月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
104 3
|
2月前
|
JavaScript
JS代码的一些常用优化写法
JS代码的一些常用优化写法
61 0
|
4月前
|
存储 JavaScript 前端开发
|
1月前
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?

热门文章

最新文章

下一篇
对象存储OSS