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

如何从价格数值数组生成价格区间数组(差值≤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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:26