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

Javascript 按code+brc+dest主键合并数组取最严格type实现方案

JavaScript 数组按组合主键高效合并方案

实现思路

  • 第一步:将所有输入项的value字段拍平为一维数组,避免多层嵌套遍历
  • 第二步:单次遍历所有项,用Map存储每个code+brc+dest组合主键对应的最高优先级type(HARD优先级高于SOFT,只要组合下出现过一次HARD,就记录为HARD)
  • 第三步:再次遍历所有项,替换为对应主键的最高优先级type,同时去重完全相同的项,得到最终结果

实现代码

function doMerge(inputData) {
  // 1. 拍平所有value数组项
  const allItems = inputData.flatMap(group => group.value);
  // 2. 统计每个组合主键的最高优先级type
  const priorityMap = new Map();
  // 拼接key加分隔符避免不同字段拼接冲突
  const getKey = item => `${item.code}|${item.brc}|${item.dest}`;
  
  allItems.forEach(item => {
    const key = getKey(item);
    const existedType = priorityMap.get(key);
    // 未记录过,或当前项type优先级更高则更新
    if (!existedType || item.type === 'HARD') {
      priorityMap.set(key, item.type);
    }
  });
  // 3. 处理去重+替换type
  const uniqueSet = new Set();
  const result = [];
  allItems.forEach(item => {
    const key = getKey(item);
    // 替换为最高优先级type
    const processed = {...item, type: priorityMap.get(key)};
    // 序列化判断是否重复,也可根据业务自定义去重规则
    const itemStr = JSON.stringify(processed);
    if (!uniqueSet.has(itemStr)) {
      uniqueSet.add(itemStr);
      result.push(processed);
    }
  });
  return result;
}

调用测试

// 传入你提供的data变量即可得到期望输出
console.log(doMerge(data));

性能说明

整体时间复杂度为O(m),m为所有value项的总数量,相比原四层嵌套循环的O(n²)复杂度,数据量越大性能优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:36:03