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

JavaScript按order-nr字段分组对象数组生成二维数组逻辑问题如何解决

问题分析
  • 核心逻辑时序错误:先把当前行数据push到dataArticle,再判断order-nr是否匹配,导致下一组的第一条数据会被错误加入当前分组的数组中
  • 引用类型赋值问题:数组是引用类型,直接将dataArticle赋值给结果数组的对应位置,后续修改dataArticle时,已存入结果的数组也会同步变动
  • 收尾逻辑缺失:循环结束后最后一组的内容没有被正确推入结果数组
修复后代码
const data = [{
  "order-nr": 1,
  "article": "Burger"
}, {
  "order-nr": 1,
  "article": "Soup"
}, {
  "order-nr": 1,
  "article": "Noodle"
}, {
  "order-nr": 2,
  "article": "Steak"
}, {
  "order-nr": 2,
  "article": "Chicken Wings"
}, {
  "order-nr": 3,
  "article": "Coffee"
}, {
  "order-nr": 4,
  "article": "Rice"
}]

const tempDataArticle = [];
// 处理空数据边界
if (!data.length) {
  console.log(tempDataArticle);
  return;
}
let currentOrder = data[0]['order-nr'];
let currentGroup = [];

for (let i = 0; i < data.length; i++) {
  const item = data[i];
  // 先判断订单号是否变化
  if (item['order-nr'] !== currentOrder) {
    // 订单号变化,把当前分组存入结果,重置分组变量
    tempDataArticle.push(currentGroup);
    currentOrder = item['order-nr'];
    currentGroup = [];
  }
  // 再把当前元素加入当前分组
  currentGroup.push(item);
}
// 循环结束后存入最后一个分组
tempDataArticle.push(currentGroup);

console.log(tempDataArticle);
逻辑说明
  • 调整执行顺序,先判断订单号是否变更,再添加当前元素到分组,避免跨组元素混入
  • 无需手动维护分组索引,直接用push方法自动处理索引,避免索引计算错误
  • 补充空数据边界判断,以及循环结束后的收尾逻辑,保证最后一组数据不会丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:09:03