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; }
代码说明
- 外层循环:遍历输入数组中的每一个餐厅对象。
- 为每个餐厅单独创建空数组
flatOrders,用于存放扁平化后的订单数据。 - 中间循环:遍历当前餐厅
orders数组中的所有子订单数组。 - 内层循环:逐个提取子数组中的元素,推入
flatOrders完成二维转一维。 - 最后将每个餐厅的扁平化订单数组加入结果集,返回即可。
该方案完全不依赖concat()、flatten()等内置函数,可得到预期的一维数组结构。
内容的提问来源于stack exchange,提问作者Rizky Amanatama
相关产品推荐
相关产品推荐

