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

JavaScript:不使用concat/flatten合并对象内的嵌套订单数组

合并餐厅订单二维数组为一维的JavaScript实现方案

我编写了一个名为mergeOrder的JavaScript函数,用于处理包含餐厅信息的数组,目标是合并各餐厅的订单数据。当前函数输出仍为嵌套数组结构,但我需要将每个餐厅的orders二维数组转换为一维数组,且不允许使用concat()、flatten()等内置扁平化函数。调整循环逻辑后仍未得到预期结果,求正确实现方法。

现有代码

function mergeOrder(data) {
  // write your code here
  let result = [];
  for (let i = 0; i < data.length; i++) {
    for (let j = 0; j < data[i].orders.length; j++) {
      result.push(data[i].orders);  
      break;
    }
  }
  return result;
}

console.log(
  mergeOrder([  
    {
      restaurant: "MekDun",
      orders: [
        ["Burger", 200],
        ["Kentang", 130],
        ["CocaCola", 400],
        ["IceCream", 186],
      ],
      reviewers: 140,
    },

    {
      restaurant: "Lawmore",
      orders: [
        ["Ayam", 126],
        ["CocaCola", 206],
        ["Burger", 368],
        ["IceCream", 80],
      ],
      reviewers: 260,
    },

    {
      restaurant: "Burger Queen",
      orders: [
        ["Ayam", 85],
        ["CocaCola", 150],
        ["Burger", 450],
        ["Kentang", 20],
      ],
      reviewers: 80,
    },
  ])
);

当前输出

[
  [
    ['Burger', 200],
    ['Kentang', 130],
    ['CocaCola', 400],
    ['IceCream', 186],
  ],
  [
    ['Ayam', 126],
    ['CocaCola', 206],
    ['Burger', 368],
    ['IceCream', 80],
  ],
  [
    ['Ayam', 85],
    ['CocaCola', 150],
    ['Burger', 450],
    ['Kentang', 20],
  ],
];

期望输出

[
  [
    'Burger',   200,
    'Kentang',  130,
    'CocaCola', 400,
    'IceCream', 186
  ],
  [
    'Ayam',     126,
    'CocaCola', 206,
    'Burger',   368,
    'IceCream', 80
  ],
  [ 'Ayam', 85, 'CocaCola', 150, 'Burger', 450, 'Kentang', 20 ],
 ]

正确实现方案

原代码的问题是直接将整个orders二维数组推入结果,没有拆解内部的子数组。我们需要通过三层循环完成扁平化:外层遍历餐厅,中间层遍历订单子数组,内层遍历子数组元素逐个收集。

修改后的代码:

function mergeOrder(data) {
  let result = [];
  // 遍历每个餐厅
  for (let i = 0; i < data.length; i++) {
    // 为当前餐厅初始化一维订单数组
    let flatOrders = [];
    // 遍历当前餐厅的所有订单子数组
    for (let j = 0; j < data[i].orders.length; j++) {
      // 遍历子数组中的每个元素,逐个加入一维数组
      for (let k = 0; k < data[i].orders[j].length; k++) {
        flatOrders.push(data[i].orders[j][k]);
      }
    }
    // 将当前餐厅的一维订单数组加入结果
    result.push(flatOrders);
  }
  return result;
}

代码说明

  1. 外层循环:遍历输入数组中的每一个餐厅对象。
  2. 为每个餐厅单独创建空数组flatOrders,用于存放扁平化后的订单数据。
  3. 中间循环:遍历当前餐厅orders数组中的所有子订单数组。
  4. 内层循环:逐个提取子数组中的元素,推入flatOrders完成二维转一维。
  5. 最后将每个餐厅的扁平化订单数组加入结果集,返回即可。

该方案完全不依赖concat()、flatten()等内置函数,可得到预期的一维数组结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:36:10