如何从价格数值数组生成价格区间数组(差值≤2则分组)
将价格数组按差值≤2分组为区间
实现思路
要完成这个需求,核心是先统一数据类型并排序,再遍历分组:
- 把字符串格式的价格转成数字,避免字符串比较的逻辑问题;
- 对数组排序(即使原数组有序,这一步也能兼容乱序的输入场景);
- 遍历过程中维护当前分组的起始和结束值,通过判断当前元素与组内最后一个元素的差值,决定是否合并到当前组。
代码实现
// 原始数组 const array = ['3','5','6','12','17','22']; // 步骤1:转数字并排序 const sortedNumbers = array.map(num => Number(num)).sort((a, b) => a - b); // 步骤2:分组处理 const result = []; if (sortedNumbers.length === 0) { console.log(result); return; } // 初始化第一个分组的起始和结束 let currentStart = sortedNumbers[0]; let currentEnd = sortedNumbers[0]; for (let i = 1; i < sortedNumbers.length; i++) { const num = sortedNumbers[i]; // 判断当前数和组内最后一个数的差值是否≤2 if (num - currentEnd <= 2) { // 合并到当前组,更新结束值 currentEnd = num; } else { // 当前组结束,转成字符串加入结果 result.push(currentStart === currentEnd ? `${currentStart}` : `${currentStart}-${currentEnd}`); // 开启新分组 currentStart = num; currentEnd = num; } } // 把最后一个分组加入结果 result.push(currentStart === currentEnd ? `${currentStart}` : `${currentStart}-${currentEnd}`); console.log(result); // 输出: ["3-6", "12", "17", "22"]
代码说明
- 数据转换与排序:字符串转数字是为了正确计算数值差值,排序保证我们能按顺序判断相邻元素的关系;
- 分组逻辑:用
currentStart和currentEnd跟踪当前组的范围,当遇到差值超过2的元素时,就把当前组收尾,开启新组; - 结果格式化:如果组内只有一个元素,直接输出数字字符串;如果是多个连续符合条件的元素,就输出
起始值-结束值的区间格式。
内容的提问来源于stack exchange,提问作者Brendan Little
相关产品推荐
相关产品推荐

