Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
灵活匹配数字组合:在数组中查找特定数字模式的教程_创想鸟

灵活匹配数字组合:在数组中查找特定数字模式的教程

灵活匹配数字组合:在数组中查找特定数字模式的教程

本教程深入探讨在JavaScript中,如何超越简单的数值相等判断,实现对数字组合的灵活匹配。我们将学习如何利用正则表达式和数组的高阶方法(如some和every),在包含额外数字的字符串中识别出目标数字的所有组成数字或特定顺序的数字序列,从而解决在数组中检查特定数字模式存在的复杂场景。

在JavaScript开发中,我们经常需要判断一个值是否存在于某个数组中。对于精确匹配,Array.prototype.includes()方法通常是首选。然而,当需求变得复杂,例如需要检查一个数字的所有组成数字是否存在于另一个可能包含额外数字的字符串中(例如,判断 789 是否存在于 7189 中),includes()方法就显得力不从心了。本教程将详细介绍如何使用正则表达式和数组迭代方法来解决这类高级的数字组合匹配问题。

1. 理解传统方法的局限性

首先,让我们回顾一下为什么传统的includes()方法无法满足这种需求。考虑以下代码:

let winArray = [123, 456, 789];let mergeUserArray = [7189];// 尝试使用includes()if (winArray.includes(Number(mergeUserArray))) {  console.log("Number matched"); // 不会匹配,因为7189不等于123, 456, 或 789} else {  console.log("Number not matched"); // 输出 "Number not matched"}// 尝试使用正则表达式进行序列匹配 (例如,检查"123"或"456"或"789"作为子字符串)let regxWinArray = /(123)|(456)|(789)/g;// '7189'.match(regxWinArray) 将返回 null,因为7189不包含这些精确的子字符串序列// 这也不能满足“789在7189中”的需求

includes()方法执行的是严格的相等性比较。而正则表达式如/(123)|(456)|(789)/g则寻找精确的子字符串序列。这两种方法都无法识别出“789 的所有数字(7, 8, 9)都存在于 7189 中”这样的模式。我们需要一种更灵活的匹配机制。

2. 方法一:检查所有组成数字的存在性(不考虑顺序)

这种方法的目标是判断一个目标数字(例如 789)的所有组成数字是否都存在于另一个源数字(例如 7189)中,并且这些数字的数量与目标数字的位数相同。这意味着我们只关心数字的“集合”是否存在,而不关心它们在源数字中的具体顺序。

核心思路:

将目标数字转换为字符串,并为每个数字创建一个字符集正则表达式(例如,对于 789,正则表达式为 /[789]/g)。将源数字转换为字符串。使用正则表达式在源字符串中匹配所有目标数字的组成数字。检查匹配到的数字数量是否等于目标数字的位数。

示例代码:

let winArray = [123, 456, 789];let mergeUserArray = [7189]; // 期望匹配 789let matchFound = winArray.some(item => // 遍历 winArray 中的每个目标数字    mergeUserArray.some(what => { // 遍历 mergeUserArray 中的每个源数字        // 1. 构建正则表达式:匹配 item 的所有数字作为字符集        // 例如,item=789,regex = /[789]/g        const regex = new RegExp(`[${item}]`, 'g');        // 2. 在源数字字符串中查找所有匹配的字符        const matchedDigits = what.toString().match(regex);        // 3. 检查匹配到的字符数量是否与 item 的位数相同        // 如果 item 的所有数字都在 what 中找到,并且数量一致,则认为匹配成功        return matchedDigits?.length === item.toString().length;    }));console.log("方法一匹配结果 (789 in 7189):", matchFound); // 输出 true// 验证其他情况:console.log("方法一匹配结果 (123 in 7189):", winArray.some(item => [7189].some(what => {    const regex = new RegExp(`[${item}]`, 'g');    return what.toString().match(regex)?.length === item.toString().length;}))); // 输出 false (因为7189只包含'1',不包含'2'和'3')console.log("方法一匹配结果 (789 in 9871):", winArray.some(item => [9871].some(what => {    const regex = new RegExp(`[${item}]`, 'g');    return what.toString().match(regex)?.length === item.toString().length;}))); // 输出 true (9871包含7,8,9,数量一致)

解释:

winArray.some(…):只要 winArray 中有一个数字满足条件,就返回 true。mergeUserArray.some(…):对于 winArray 中的每个数字,只要 mergeUserArray 中有一个数字满足条件,就返回 true。new RegExp([${item}], ‘g’):动态创建正则表达式。例如,如果 item 是 789,它会生成 /[789]/g。这个正则表达式会匹配字符串中所有出现的 7、8 或 9。what.toString().match(regex):在 what 的字符串形式中查找所有匹配的字符。例如,’7189′.match(/[789]/g) 会返回 [‘7’, ‘8’, ‘9’]。matchedDigits?.length === item.toString().length:这是关键的判断条件。它确保了 item 的所有位数都找到了对应的字符,并且数量一致。如果 matchedDigits 为 null(即没有找到任何匹配),?.length 会安全地返回 undefined,从而导致 false。

3. 方法二:检查有序数字序列的存在性

如果你的需求是不仅要找到所有组成数字,而且这些数字在源字符串中被提取出来后,必须按照目标数字的原始顺序排列,那么就需要对上述方法进行微调。

核心思路:

与方法一相同,构建字符集正则表达式。在源数字字符串中匹配所有目标数字的组成数字。将匹配到的数字按顺序连接成一个字符串。比较连接后的字符串是否与目标数字的字符串形式完全相同。

示例代码:

let winArray = [123, 456, 789];const hasOrderedMatch = mergeUserArray => winArray.some(item =>    mergeUserArray.some(what => {        const regex = new RegExp(`[${item}]`, 'g');        const matchedDigits = what.toString().match(regex);        // 检查匹配到的字符连接起来后是否与 item 字符串相同        // 例如,对于 item=789, what=7189,matchedDigits=['7','8','9']        // join('') 得到 '789',与 item.toString() 相同        return matchedDigits?.join('') === item.toString();    }));console.log("方法二匹配结果 (789 in 7189):", hasOrderedMatch([7189])); // 输出 trueconsole.log("方法二匹配结果 (1897, 检查 789):", hasOrderedMatch([1897])); // 输出 true (因为1897中提取7,8,9是'897',不匹配'789',但这里item是789,匹配到是789。                                                                   // 实际测试:item=789, what=1897. regex=/[789]/g. match=['8','9','7']. join='' => '897'. '897' !== '789'. 应该是false。                                                                   // 修正:答案代码中的例子是 `console.log([1897], hasMatch([1897]));` 这会检查 `winArray` 中的 `789` 是否在 `1897` 中。                                                                   // 实际运行:item=789, what=1897. `match(/[789]/g)` 得到 `['8', '9', '7']`. `join('')` 得到 `'897'`. `'897' === '789'` 为 `false`.                                                                   // 所以,`hasOrderedMatch([1897])` 应该输出 `false`。                                                                   // 答案代码中的 `console.log([1897], hasMatch([1897]));` 实际上是期望 `false` 的。                                                                   // 让我们再测试一个例子:console.log("方法二匹配结果 (123 in 312):

以上就是灵活匹配数字组合:在数组中查找特定数字模式的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1540990.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
React Hook Form:提交时高效处理空字符串到Null的策略
上一篇 2025年12月21日 12:56:28
JavaScript多语言文本词语计数:Intl.Segmenter的现代方法
下一篇 2025年12月21日 12:56:36

相关推荐

  • PHP匿名函数怎么用_PHP匿名函数使用场景分析

    PHP匿名函数是无名函数,可作为回调或赋值给变量,常用在数组处理、事件回调、逻辑封装等场景,支持use引入外部变量及fn短语法,结合bindTo可访问对象私有成员。 PHP匿名函数,也叫闭包函数(Closure),是一种没有名称的函数,通常作为回调使用或赋值给变量。它在实际开发中非常灵活,尤其适合用…

    2026年9月22日
    100
  • 抖音专营店怎么添加直播号?怎么把新开的抖音号添加到专营店里

    随着抖音平台社交属性不断增强,内容生态日益丰富,越来越多电商从业者开始在该平台上开展业务。其中,抖音专营店作为电商布局的重要一环,也吸引了大量商家入驻。那么,如何将直播号加入抖音专营店中,让直播成为店铺引流和销售的新工具呢?接下来的内容将为您详细介绍。 一、为什么要在抖音专营店中添加直播号 提升店铺…

    2026年9月22日
    000
  • Meeseeks— 美团开源的模型指令遵循能力评测集

    Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集Meeseeks— 美团开源的模型指令遵循能力评测集

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ AGI-Eval评测社区 AI大模型评测社区 63 查看详情 Meeseeks是什么 meeseeks 是由美团 m17 团队推出的开源大模型评测基准,专注于评估模型在指令遵循方面的能力。该评测…

    2026年9月22日 • 用户投稿
    200
  • 为什么建议手动定义Java序列化ID

    手动定义serialVersionUID可确保序列化兼容性,避免因类结构变化导致反序列化失败。Java默认生成的ID依赖类名、字段等信息,编译环境或代码微小改动均使其改变,易引发InvalidClassException。显式声明后,可在兼容性变更时主动控制ID更新,保留原ID则允许旧版本读取新对象…

    2026年9月22日
    200
  • VSCode如何通过调试变量监视列表批量追踪数据变化 VSCode变量监视列表批量追踪的新颖技巧​

    VSCode如何通过调试变量监视列表批量追踪数据变化 VSCode变量监视列表批量追踪的新颖技巧​VSCode如何通过调试变量监视列表批量追踪数据变化 VSCode变量监视列表批量追踪的新颖技巧​VSCode如何通过调试变量监视列表批量追踪数据变化 VSCode变量监视列表批量追踪的新颖技巧​VSCode如何通过调试变量监视列表批量追踪数据变化 VSCode变量监视列表批量追踪的新颖技巧​

    vscode中高效批量追踪数据变化的关键是将监视列表用作表达式求值器,而非仅添加单一变量;2. 可在监视列表中添加复杂对象路径(如user.profile.address.city)、计算表达式(如(a + b) * c)、函数调用(如calculatetotal(items))或条件判断(如myv…

    2026年9月22日 • 用户投稿
    000
  • 在Java中如何统计List中元素出现次数

    答案是使用Map或Stream API统计List元素频次最高效。通过HashMap手动遍历统计,或用Java 8的Stream结合groupingBy和counting()实现简洁计数,Collections.frequency适用于小数据量但性能较差,推荐Stream方式兼顾性能与可读性。 在J…

    2026年9月22日
    900
  • c盘清理工具哪个好用_好用的C盘清理工具推荐与使用评测

    推荐C盘清理方案:系统自带工具如磁盘清理、存储感知和手动清%temp%目录安全可靠,适合日常维护;第三方工具CCleaner、金舟Windows优化大师、风云C盘清理大师和全能C盘清理专家提供一键深度清理,操作便捷且误删率低;空间分析工具WizTree、SpaceSniffer和TreeSize可可…

    2026年9月22日
    000
  • mysql安装完如何诊断 mysql慢查询分析与优化方法

    要解决 mysql 慢查询问题,首先要开启慢查询日志,其次使用 mysqldumpslow 分析日志,再通过 explain 查看执行计划,最后根据常见优化建议改进 sql 和索引。具体步骤如下:一、修改配置文件或动态开启慢查询日志,并设置阈值和路径;二、使用 mysqldumpslow 工具分析慢…

    2026年9月22日
    100
  • PHP如何实现视频留言评论_PHP实现视频留言评论功能

    答案:通过数据库设计、前端表单、后端处理和评论展示四步实现PHP视频留言功能。1. 创建comments表存储信息;2. 构建表单提交昵称与评论;3. 用add_comment.php接收并存入数据库;4. 在页面读取并安全输出评论,防止XSS。 要实现视频留言评论功能,PHP可以结合前端页面、数据…

    2026年9月22日
    000
  • Java中如何区分逻辑错误和系统异常

    系统异常是程序运行中由JVM抛出的RuntimeException,如空指针、数组越界,会导致程序中断并打印堆栈;逻辑错误是程序语法正确但结果不符预期,如条件写反、循环次数错误,不会崩溃但行为异常。两者区别在于是否抛出异常、是否中断执行及调试方式不同,需通过防御性编程、单元测试和日志调试加以防范。 …

    2026年9月22日
    000
  • 抖音小店如何运营?普通人开店选品与推广的实用策略

    抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略抖音小店如何运营?普通人开店选品与推广的实用策略

    新手做抖音小店最现实的问题是没钱投广告和没专业团队,解决方法是抓住选品和推广两个核心环节。一、选品要找市场需求高且利润合理的商品,避开竞争激烈或太冷门的品类,结合多平台数据测试;二、前期重点用“商品卡”推广,通过短视频展示产品使用场景并挂链接引流,成本低且适合测试;三、适当尝试直播积累经验,但不依赖…

    2026年9月22日 • 用户投稿
    400
  • Spring Boot 应用中的单元测试、Mockito 和集成测试:最佳实践

    第一段引用上面的摘要: 本文旨在帮助初学者理解在 Spring Boot 应用中何时以及如何使用 JUnit、Mockito 和集成测试。我们将探讨这些测试框架在 Controller、Service 和 Repository 层中的应用,并提供示例说明何时使用 Mockito 模拟对象,以及何时使…

    2026年9月22日
    000
  • 如何查询命令所属包 yum provides反向查找

    如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找如何查询命令所属包 yum provides反向查找

    使用 yum provides 可以查找某个命令或文件属于哪个软件包,解决“command not found”问题。1. 使用时建议带上完整路径,如 yum provides /usr/sbin/ifconfig;2. 支持通配符模糊查找,如 yum provides */python3;3. 若…

    2026年9月22日 • 用户投稿
    000
  • mysql如何输入变量值 mysql交互式代码输入步骤详解

    mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解

    在mysql命令行中交互式输入变量值可通过预处理语句或用户自定义变量实现。1. 使用预处理语句时,先用prepare定义含占位符的sql语句,再通过set设置变量值,最后用execute执行并传参,完成后需deallocate释放资源;2. 使用用户自定义变量时,直接通过set赋值并在sql语句中引…

    2026年9月22日 • 用户投稿
    100
  • Karate框架中处理带方括号和日期范围的GET请求参数

    本文旨在解决Karate框架中构建包含复杂、带方括号(如filters[start_date])及日期范围的GET请求参数时遇到的URL编码问题。通过对比直接定义查询对象和使用param关键字的方法,详细阐述了如何正确地构造URL,确保参数格式符合预期,从而有效进行API测试。 1. 问题背景与挑战…

    2026年9月22日
    000
  • vivoS系列手机微信收款语音播报怎么设置?配置语音的详细方法

    开启微信收款语音播报需在微信“收付款”中启用“收款语音提醒”并授权麦克风权限;2. vivo手机需在设置中开启微信的自启动、后台运行、通知及麦克风权限以确保功能正常;3. 语音播报延迟或无声可能由网络、手机性能、微信版本、系统模式或第三方软件干扰导致;4. 除微信自带功能外,还可选用第三方收款App…

    2026年9月22日
    600
  • windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程

    windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程windows11怎么开启或关闭Hyper-V虚拟机_windows11虚拟化功能设置教程

    首先确认硬件支持并开启CPU虚拟化,再根据系统版本通过图形界面或命令行启用Hyper-V,操作后重启生效,最后使用Hyper-V管理器验证状态。 如果您在使用Windows 11时需要运行虚拟机或兼容特定模拟器,可能需要开启或关闭Hyper-V功能。该功能依赖于系统版本和硬件支持,操作后需重启生效。…

    2026年9月22日 • 用户投稿
    100
  • 日本科幻战斗飞行游戏《G-Rebels》实机宣传片

    日本科幻战斗飞行游戏《G-Rebels》实机宣传片日本科幻战斗飞行游戏《G-Rebels》实机宣传片日本科幻战斗飞行游戏《G-Rebels》实机宣传片日本科幻战斗飞行游戏《G-Rebels》实机宣传片

    日本开发商reakktor studios公开了飞行模拟游戏《g-rebels》的实机宣传视频,该作是一款开放世界战斗飞行模拟游戏,玩家可以一览《g-rebels》中活力四射和密集的城市群,从精英家园伊甸园到饱受战争蹂躏和被海啸淹没的城市威尼斯。 《G-Rebels》将登陆PC Steam平台,目前…

    2026年9月22日 • 用户投稿
    100
  • 抖音小店网页版怎么登录?抖音我的小店在哪里

    随着抖音电商平台的快速发展,越来越多的商家选择入驻该平台。作为商家运营的重要工具之一,抖音小店网页版为店铺管理带来了诸多便利。那么,如何正确登录抖音小店网页版?又该如何找到“我的小店”?下面将为您详细介绍。 一、为什么需要登录抖音小店网页版? 通过抖音小店网页版,商家可以高效地进行商品管理、订单处理…

    2026年9月22日
    000
  • 牧场物语来吧风之繁华集市兑换码分享 牧场物兑换码分享

    《牧场物语:来吧!风之繁华集市》最新通用兑换码曝光:BOKUJO888、WIND2025、COW666 等,输入后可在游戏内邮箱领取丰厚奖励,包括限定奶牛皮肤、双倍经验卡以及1000G金币。操作方式为:领取成功后,进入游戏按X键打开背包,切换至邮件页面即可查收道具。 热门兑换码详情如下: BOKUJ…

    2026年9月22日
    400

发表回复

登录后才能评论
关注微信