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

