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

JavaScript对象数组按id趋势分组并添加IDS标记的需求实现咨询

JavaScript对象数组按id趋势分组并添加IDS标记的需求实现咨询

嗨,我仔细分析了你给出的输入数组和期望输出,先帮你明确一下从示例里反推出来的分组规则,再给出对应的JavaScript实现:

从示例总结的分组规则

  • 初始IDS从1开始,第一个元素直接标记IDS:1
  • 当出现以下两种情况时,开启新分组,IDS值递增1:
    1. 当前元素的id比前一个元素的id小,且前一个元素的id是当前分组的最大值
    2. 当前元素的id比前一个元素的id大,且前一个元素的id是当前分组的最小值
  • 其他情况(比如当前元素在分组的最小/最大值之间波动),都属于当前分组,IDS保持不变

这个规则完美匹配你给出的示例输出:

  • 第一组id从1递增到5(最大值5),后续遇到id:4(比5小),开启新分组IDS:2
  • 第二组id从4又回到5(最大值5),后续遇到id:4(比5小),开启新分组IDS:3
  • 第三组id从4递减到2(最小值2),后续遇到id:3(比2大),开启新分组IDS:4
  • 第四组id从3回到2,属于当前分组,保持IDS:4

实现代码

const lists = [
  { price:10, id:1},
  { price:11, id:2},
  { price:12, id:3},
  { price:13, id:4},
  { price:14, id:5},

  { price:12, id:4},
  { price:12, id:5},

  { price:11, id:4},
  { price:10, id:3},
  { price:9,  id:2},

  { price:12, id:3},
  { price:12, id:2},
];

// 处理空数组的边界情况
if (lists.length === 0) {
  console.log([]);
}

// 初始化结果数组,第一个元素标记IDS=1
const result = [{...lists[0], IDS: 1}];
// 跟踪当前分组的最小、最大id,以及当前IDS值
let currentMin = lists[0].id;
let currentMax = lists[0].id;
let currentIDS = 1;

// 从第二个元素开始遍历处理
for (let i = 1; i < lists.length; i++) {
  const currentId = lists[i].id;
  const prevId = lists[i-1].id;
  let needNewGroup = false;

  // 判断是否需要开启新分组
  if (currentId < prevId && prevId === currentMax) {
    needNewGroup = true;
  } else if (currentId > prevId && prevId === currentMin) {
    needNewGroup = true;
  }

  if (needNewGroup) {
    // 开启新分组,更新IDS和当前分组的最小/最大值
    currentIDS++;
    currentMin = currentId;
    currentMax = currentId;
  } else {
    // 更新当前分组的最小/最大值
    currentMin = Math.min(currentMin, currentId);
    currentMax = Math.max(currentMax, currentId);
  }

  // 将当前元素添加到结果数组
  result.push({...lists[i], IDS: currentIDS});
}

// 输出结果
console.log(result);

运行结果

这段代码运行后会输出你期望的结果:

[
  { price: 10, id: 1, IDS: 1 },
  { price: 11, id: 2, IDS: 1 },
  { price: 12, id: 3, IDS: 1 },
  { price: 13, id: 4, IDS: 1 },
  { price: 14, id: 5, IDS: 1 },
  { price: 12, id: 4, IDS: 2 },
  { price: 12, id: 5, IDS: 2 },
  { price: 11, id: 4, IDS: 3 },
  { price: 10, id: 3, IDS: 3 },
  { price: 9, id: 2, IDS: 3 },
  { price: 12, id: 3, IDS: 4 },
  { price: 12, id: 2, IDS: 4 }
]

如果这个规则和你实际想要的有出入,比如你对(4,5)和(3,2)部分有其他逻辑要求,可以再补充描述细节,我再帮你调整代码~

备注:内容来源于stack exchange,提问作者Ben Davidsson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:19:36