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
相关产品推荐
相关产品推荐

