You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:45:02