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

JS按首元素合并二维数组:将多元素数组归至对应单元素数组下方

二维数组分组整理实现方案

核心思路

  • 遍历原数组,将元素分为两类:单元素子数组(以唯一元素为键)、多元素子数组(以首元素为键),同时记录单元素子数组的首次出现顺序
  • 按照记录的单元素顺序,依次输出对应单元素子数组,再按原数组顺序追加该键下的所有多元素子数组
  • 反向场景无需额外修改逻辑:无论单元素子数组出现在原数组的哪个位置,都会先记录其出现顺序,后续将对应多元素子数组按原顺序挂载到其下方

代码实现(JavaScript示例)

function groupSubarrays(arr) {
    const singleElementOrder = [];
    const singleElementMap = new Map();
    const multiElementMap = new Map();

    // 第一步:分类存储元素,记录顺序
    for (const item of arr) {
        const key = item[0];
        if (item.length === 1) {
            if (!singleElementMap.has(key)) {
                singleElementMap.set(key, item);
                singleElementOrder.push(key);
            }
        } else {
            if (!multiElementMap.has(key)) {
                multiElementMap.set(key, []);
            }
            multiElementMap.get(key).push(item);
        }
    }

    // 第二步:按顺序组装结果
    const result = [];
    for (const key of singleElementOrder) {
        result.push(singleElementMap.get(key));
        if (multiElementMap.has(key)) {
            result.push(...multiElementMap.get(key));
        }
    }

    return result;
}

// 常规场景测试
const originalArr = [
    ["WN"],
    ["WN","LAS"],
    ["MQ"],
    ["MQ","ORD"],
    ["AA"],
    ["WN","BWI"]
];
console.log(groupSubarrays(originalArr));
// 输出:[["WN"], ["WN","LAS"], ["WN","BWI"], ["MQ"], ["MQ","ORD"], ["AA"]]

// 反向场景测试(单元素组在多元素组之后)
const reverseArr = [
    ["WN","LAS"],
    ["MQ","ORD"],
    ["WN"],
    ["AA"],
    ["WN","BWI"],
    ["MQ"]
];
console.log(groupSubarrays(reverseArr));
// 输出:[["WN"], ["WN","LAS"], ["WN","BWI"], ["AA"], ["MQ"], ["MQ","ORD"]]

逻辑说明

  • 单元素子数组仅保留首次出现的实例与顺序,若需求是保留所有单元素子数组,可将singleElementMap改为存储数组,遍历原数组时直接追加即可
  • 多元素子数组严格遵循原数组中的出现顺序,不会因分组调整打乱原有排列
  • 该逻辑天然支持反向场景,核心是优先记录单元素的出现顺序,再批量挂载对应多元素子数组

内容的提问来源于stack exchange,提问作者ET-CS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:48:09