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

如何在JavaScript中交换对象的键与值数组?需用指定API

问题

我有如下数据:

obj = {
  "Great Lakes": ["Michigan", "Indiana", "Ohio"],
  "Heartland": ["Missouri", "Illinois"]
}

希望将其转换为如下形式:

{"Illinois": "Heartland", "Michigan": "Great Lakes", ...} 

要求必须使用Map、Object.entries和Array.flat()。我尝试了:namemap = new Map(Object.entries(obj).map(function ([k, v]) {return [v, k];} )),但这不是我想要的结果,可能代码不完整。请问该如何实现?

解决方案

你的代码问题在于直接把整个州数组作为Map的键,而我们需要将数组里的每个州单独作为键对应区域名。按照要求的API,实现步骤如下:

  1. 用Object.entries将原对象转为键值对数组,每个元素是[区域名, 州数组]的结构;
  2. 遍历每个区域的键值对,把州数组里的每个元素和区域名组成新的键值对数组,再用flat()将嵌套数组拍平为一维数组;
  3. 用拍平后的数组创建Map,最后可按需转为普通对象。

完整代码示例:

const obj = {
  "Great Lakes": ["Michigan", "Indiana", "Ohio"],
  "Heartland": ["Missouri", "Illinois"]
};

// 生成扁平化的[州名, 区域名]键值对数组
const flattenedEntries = Object.entries(obj)
  .map(([region, states]) => states.map(state => [state, region]))
  .flat();

// 创建符合要求的Map
const stateToRegionMap = new Map(flattenedEntries);

// 若需要转换为普通对象
const stateToRegionObj = Object.fromEntries(stateToRegionMap);

console.log(stateToRegionObj);
// 输出结果:
// {
//   Michigan: 'Great Lakes',
//   Indiana: 'Great Lakes',
//   Ohio: 'Great Lakes',
//   Missouri: 'Heartland',
//   Illinois: 'Heartland'
// }

关键步骤解释

  • Object.entries(obj):将原对象转换为二维数组,结构为[["Great Lakes", [...]], ["Heartland", [...]]];
  • 内层states.map(state => [state, region]):把每个州和对应的区域名绑定,此时会生成嵌套的二维数组;
  • .flat():将嵌套数组拍平为一维数组,确保每个元素都是独立的[州名, 区域名]键值对;
  • new Map(flattenedEntries):用处理后的一维数组初始化Map,实现州到区域的映射;
  • Object.fromEntries(stateToRegionMap):按需将Map转换为普通对象,满足你想要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:10:31