首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)

  • 25-02-22 02:41
  • 4104
  • 10602
blog.csdn.net

目录

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

1.1、基本语法

1.2、返回值

1.3、使用技巧

1.3.1、检查用户权限

1.3.2、检查表单输入的有效性

1.3.3、检查库存中是否有特定商品

1.3.4、检查用户输入是否包含敏感词汇

1.3.5、金融数据实时分析中的异常检测

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

2.1、相同之处

2.2、不同之处

三、总结


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

1.1、基本语法

array.some(callback(currentValue, index, array), thisArg)

        callback:一个函数,它会被调用数组中每个元素,直到找到一个使该函数返回 true 的元素。

  • currentValue:当前正在处理的数组元素。
  • index(可选):当前正在处理的数组元素的索引。
  • array(可选):正在操作的数组。

        thisArg(可选):执行 callback 函数时用作 this 的值。 

1.2、返回值

  1. 如果 callback 函数对任一元素返回 true,则返回 true。
  2. 如果 callback 函数从未返回 true,则返回 false。

1.3、使用技巧

        array.some()用于检测数组中是否有至少一个元素满足提供的测试函数。这个方法接受一个函数作为参数,这个函数会被依次应用到数组的每个元素上。如果这个函数对任一元素返回 true,则 some() 方法也会返回 true,否则它会继续检查数组中的下一个元素。如果数组中没有任何元素满足测试函数,some() 方法将返回 false。

        应用场景:权限检查、表单验证、库存管理、内容审查和数据处理。

1.3.1、检查用户权限

        在用户权限系统中,检查用户是否拥有执行特定操作的权限。

  1. // 在用户权限系统中,检查用户是否拥有执行特定操作的权限。
  2. const userPermissions = ['read', 'write', 'delete'];
  3. const operationRequires = ['delete'];
  4. function canPerformOperation(permissions, requiredPermissions) {
  5. return requiredPermissions.some(required => permissions.includes(required));
  6. }
  7. const canDelete = canPerformOperation(userPermissions, operationRequires);
  8. console.log('User can delete:', canDelete); // 输出:true 或 false 取决于用户权限

1.3.2、检查表单输入的有效性

        创建一个表单验证函数,该函数能够验证多种类型的输入,包括基本的HTML5验证、自定义格式验证、以及多个输入间的匹配验证。

  1. // 创建一个表单验证函数,该函数能够验证多种类型的输入,包括基本的HTML5验证、自定义格式验证、以及多个输入间的匹配验证。
  2. <script>
  3. import { ref } from 'vue';
  4. export default {
  5. setup() {
  6. const email = ref('');
  7. const password = ref('');
  8. const confirmPassword = ref('');
  9. const handleSubmit = () => {
  10. const form = document.querySelector('form');
  11. const inputs = form.querySelectorAll('input');
  12. const hasError = Array.some.call(inputs, (input) => {
  13. if (!input.checkValidity()) {
  14. input.focus();
  15. return true;
  16. }
  17. switch (input.name) {
  18. case 'email':
  19. if (!validateEmail(input)) {
  20. return true;
  21. }
  22. break;
  23. case 'password':
  24. if (!validatePassword(input)) {
  25. return true;
  26. }
  27. break;
  28. case 'confirmPassword':
  29. if (!validateConfirmPassword(input, password.value)) {
  30. return true;
  31. }
  32. break;
  33. }
  34. input.setCustomValidity('');
  35. return false;
  36. });
  37. if (hasError) {
  38. console.log('Form has errors');
  39. return false;
  40. }
  41. console.log('Form is valid');
  42. // 可以在这里实现表单提交逻辑
  43. };
  44. const validateEmail = (input) => {
  45. const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  46. return emailPattern.test(input.value);
  47. };
  48. const validatePassword = (input) => {
  49. return input.value.length >= 8;
  50. };
  51. const validateConfirmPassword = (input, passwordValue) => {
  52. return input.value === passwordValue;
  53. };
  54. return {
  55. email,
  56. password,
  57. confirmPassword,
  58. handleSubmit
  59. };
  60. }
  61. };
  62. script>

1.3.3、检查库存中是否有特定商品

        在电子商务网站中,检查库存中是否有用户想要购买的商品。

  1. // 在电子商务网站中,检查库存中是否有用户想要购买的商品。
  2. const inventory = [
  3. {
  4. id: 1,
  5. item: 'apple',
  6. quantity: 10,
  7. price: 0.99,
  8. restocked: new Date('2023-04-01'),
  9. restockingInterval: 7,
  10. category: 'fruits'
  11. },
  12. {
  13. id: 2,
  14. item: 'banana',
  15. quantity: 5,
  16. price: 0.59,
  17. restocked: new Date('2023-04-05'),
  18. restockingInterval: 10,
  19. category: 'fruits'
  20. },
  21. {
  22. id: 3,
  23. item: 'orange',
  24. quantity: 0,
  25. price: 0.79,
  26. restocked: new Date('2023-03-20'),
  27. restockingInterval: 14,
  28. category: 'fruits'
  29. },
  30. {
  31. id: 4,
  32. item: 'milk',
  33. quantity: 35,
  34. price: 2.49,
  35. restocked: new Date('2023-04-08'),
  36. restockingInterval: 5,
  37. category: 'dairy'
  38. },
  39. {
  40. id: 5,
  41. item: 'bread',
  42. quantity: 20,
  43. price: 1.99,
  44. restocked: new Date('2023-04-09'),
  45. restockingInterval: 3,
  46. category: 'bakery'
  47. },
  48. // ...更多库存项
  49. ];
  50. function isItemInStock(item) {
  51. return inventory.some(stock => stock.item === item && stock.quantity > 0);
  52. }
  53. const isOrangeInStock = isItemInStock('orange');
  54. console.log('Orange is in stock:', isOrangeInStock); // 输出:false

1.3.4、检查用户输入是否包含敏感词汇

        在内容管理系统中,检查用户提交的内容是否包含不允许的敏感词汇。

  1. // 在内容管理系统中,检查用户提交的内容是否包含不允许的敏感词汇。
  2. const sensitiveWords = ['badword1', 'badword2', 'badword3'];
  3. const userInput = "This is a test post without any bad words.";
  4. function containsSensitiveWord(input) {
  5. return sensitiveWords.some(word => input.includes(word));
  6. }
  7. const hasSensitiveContent = containsSensitiveWord(userInput);
  8. console.log('Contains sensitive content:', hasSensitiveContent); // 输出:false

1.3.5、金融数据实时分析中的异常检测

        在金融交易数据流中,实时检测是否存在任何异常交易,如交易金额超出正常范围。

  1. // 在金融交易数据流中,实时检测是否存在任何异常交易,如交易金额超出正常范围。
  2. const transactions = [
  3. { id: 1, amount: 100 },
  4. { id: 2, amount: 200 },
  5. { id: 3, amount: 50000 },
  6. // ... 更多交易记录
  7. ];
  8. const normalTransactionThreshold = 10000; // 正常交易金额的阈值
  9. function detectAbnormalTransaction(transactions) {
  10. return transactions.some(transaction => transaction.amount > normalTransactionThreshold);
  11. }
  12. // 模拟实时数据流处理
  13. function processTransactionStream(transactions) {
  14. const hasAbnormalTransaction = detectAbnormalTransaction(transactions);
  15. if (hasAbnormalTransaction) {
  16. // 触发异常处理流程
  17. console.log('An abnormal transaction has been detected.');
  18. // 可以在这里实现进一步的逻辑,如记录日志、发送警报等
  19. } else {
  20. // 正常处理流程
  21. console.log('All transactions are within normal range.');
  22. }
  23. }
  24. // 模拟接收一批新的交易记录
  25. const newTransactions = [
  26. { id: 4, amount: 5000 },
  27. { id: 5, amount: 7000 },
  28. { id: 6, amount: 60000 }, // 这个交易金额超出了正常范围
  29. ];
  30. processTransactionStream([...transactions, ...newTransactions]);

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

2.1、相同之处

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

2.2、不同之处

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

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

        我还有关于array.every()的介绍博客,我个人用array.some()更多,array.every()传送门:通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)-CSDN博客

三、总结

        array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。

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

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览62647 人正在系统学习中
注:本文转载自blog.csdn.net的Watermelo617的文章"https://blog.csdn.net/RenGJ010617/article/details/138730756"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top