如何在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,实现步骤如下:
- 用
Object.entries将原对象转为键值对数组,每个元素是[区域名, 州数组]的结构; - 遍历每个区域的键值对,把州数组里的每个元素和区域名组成新的键值对数组,再用
flat()将嵌套数组拍平为一维数组; - 用拍平后的数组创建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
相关产品推荐
相关产品推荐

