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
相关产品推荐
相关产品推荐

