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

JavaScript实现统计含区间与单值的列表数值总个数

JS统计混合单数字、数值区间列表的总数值个数

需求场景

现有多个列表,列表元素只有两种格式:

  • 独立单个数字
  • 起始值-结束值 形式的闭区间
    示例列表:
const a = [ 2, '47-54', '68-69', '120-121', 318, 320, 342, '364-366', '414-422', '503-505', '513-514', 529, 554, 586, 690, 775, 913, 1018, 1117, 1159, 1183, '1218-1219', 1379, 1478, 1491, 1497, 1510, 1562, 1601, 1664, 1673, 1686, 1692, 1710, '1759-1765', '1862-1881', '1951-1962', 1992, 2020 ]
const b = [ 18, 28, '34-35', '58-84', '110-137', '139-191', '193-272' ]
// 列表b的正确统计结果为192

需要实现统计逻辑:单数字每个计1个,闭区间按覆盖的所有整数数量计数,最终返回列表包含的数值总个数。

简洁实现代码

const countValues = arr => arr.reduce((sum, cur) => {
  if (String(cur).includes('-')) {
    const [start, end] = String(cur).split('-').map(Number)
    return sum + end - start + 1
  }
  return sum + 1
}, 0)

// 测试验证
console.log(countValues(b)) // 输出 192,符合预期

逻辑说明

  • 用数组reduce方法做累加,不需要额外声明计数变量,代码精简
  • 闭区间整数个数计算公式固定为结束值 - 起始值 + 1,比如34-35共2个值,直接套公式计算即可
  • 做了类型兼容,不管单数字是数字类型还是字符串类型、区间是字符串还是其他可转字符串的格式,都能正常计算
  • 遍历一次数组即可出结果,时间复杂度O(n),性能无问题

内容的提问来源于stack exchange,提问作者Amirtaraj R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:48:20