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

JS中如何将含重复键的二元组数组转为键唯一、值为对应项列表的Map

实现方案

首先需要说明:你给出的原始数组中{ "Caerus1", "Ramses Refiner" }的写法不符合JavaScript语法规范,默认按笔误修正为二维数组结构[["Caerus1", "Ramses Refiner"], ...]实现,如果是特殊双元素对象结构可以自行调整取值逻辑。

核心转换代码

// 原始数组(修正语法后)
const rawList = [
  ["Caerus1", "Ramses Refiner"],
  ["Caerus1", "Jupiter Refiner"],
  ["Caerus1", "Jupiter Other"],
  ["Caerus1", "Trader 13"],
  ["Caerus1", "Cathode Supplier 4"],
  ["Dionysus3", "Cathode Supplier 4"],
  ["Dionysus3", "Ramses Refiner"],
  ["Dionysus3", "Trader 13"],
  ["Dionysus3", "Jupiter Refiner"],
  ["Dionysus3", "Jupiter Other"],
  ["Prometheus2", "Jupiter Other"],
  ["Prometheus2", "Ramses Refiner"],
  ["Prometheus2", "Trader 13"],
  ["Prometheus2", "Cathode Supplier 4"],
  ["Prometheus2", "Jupiter Refiner"]
]

// 转换为原生Map结构
const resultMap = rawList.reduce((map, [key, value]) => {
  // 键不存在时先初始化空数组
  !map.has(key) && map.set(key, [])
  // 推入当前值到对应分组
  map.get(key).push(value)
  return map
}, new Map())

适配你示例的输出格式

如果需要输出你示例中「单键值对对象组成的数组」格式,追加如下转换代码即可:

const formattedResult = Array.from(resultMap.entries()).map(([k, v]) => ({ [k]: v }))

特殊原始结构适配

如果你的原始数据确实是不规范的双元素对象结构,将reduce内的取值逻辑替换为下方代码即可适配:

const key = Object.keys(item)[0]
const value = Object.values(item)[1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:09:00