JavaScript中如何按顺序检查一个数字是否包含另一个数字?
结论
JavaScript 没有提供数组原生的、直接判断「连续且按顺序包含另一个数组」的方法。针对你当前的数字数位匹配场景,用字符串原生方法即可快速实现;如果是通用数组场景,可以自行编写匹配逻辑。
数字场景最简实现
字符串的 includes() 本身就是按顺序做连续匹配,完全符合需求,不需要手动拆分为字符数组逐位判断:
function numbers(subNum, targetNum) { const result = targetNum.toString().includes(subNum.toString()); console.log(result); return result; } numbers(23, 57238); // true numbers(14, 1345); // false numbers(34, 1345); // true
通用数组连续包含实现
如果需要判断任意类型数组的连续有序包含,可以通过两层循环实现:遍历大数组所有合法起始位置,逐位对比子数组元素,全部匹配则返回 true。
function isConsecutiveSubArray(subArr, targetArr) { // 边界情况处理 if (subArr.length === 0) return true; if (subArr.length > targetArr.length) return false; // 只需遍历到剩余长度足以容纳子数组的位置 for (let i = 0; i <= targetArr.length - subArr.length; i++) { let isMatched = true; for (let j = 0; j < subArr.length; j++) { // 如果是对象等引用类型,可替换为自定义的相等判断规则 if (targetArr[i + j] !== subArr[j]) { isMatched = false; break; } } if (isMatched) return true; } return false; }
测试用例:
isConsecutiveSubArray([2, 3], [5, 7, 2, 3, 8]); // true isConsecutiveSubArray([3, 2], [5, 7, 2, 3, 8]); // false isConsecutiveSubArray([1, 4], [1, 3, 4, 5]); // false
如果处理的数组长度很大、对性能要求较高,可以替换为 KMP 匹配算法降低时间复杂度,普通业务和练习场景下上述实现足够易用。
原代码的问题
- 对每个元素单独调用数组的
includes(),仅能校验元素是否存在,既不校验元素的相对顺序,也无法保证位置连续 number变量会在每次循环中被覆盖,最终结果仅由子数组最后一个元素是否存在决定,前面的判断全部失效
内容的提问来源于stack exchange,提问作者Luiz Gabriel Masson Beloti
相关产品推荐
相关产品推荐

