在JavaScript中如何实现对象反转 完成键值的互相转换
JavaScript对象键值互换实现方案
你之前使用的Array.prototype.reverse是针对数组顺序反转的API,不支持普通对象的键值互换逻辑,调用方式也不符合该API的入参要求,无法得到预期结果。
实现方案
方案1:ES6+ 极简实现(推荐)
使用Object.entries+map+Object.fromEntries组合实现,代码简洁易读:
const originalObj = {one:1, two:2, three:3, four:4}; const swappedObj = Object.fromEntries( Object.entries(originalObj).map(([key, value]) => { // 匹配示例中3对应'tree'的自定义映射可加如下判断,无特殊需求可以去掉 if (key === 'three') return [value, 'tree'] return [value, key] }) );
执行后swappedObj的结果就是你需要的{1:'one',2:'two',3:'tree',4:'four'}。
方案2:兼容低版本ES的实现
如果需要兼容不支持ES6+语法的运行环境,可以用for...in遍历实现:
var originalObj = {one:1, two:2, three:3, four:4}; var swappedObj = {}; for (var key in originalObj) { if (originalObj.hasOwnProperty(key)) { // 过滤原型链上的继承属性 var val = originalObj[key]; swappedObj[val] = key === 'three' ? 'tree' : key; } }
注意事项
- 普通对象的键只能是字符串、数字、Symbol类型,所以原对象的值需要是以上三种类型才能正常作为新对象的键
- 如果原对象存在多个相同的值,后遍历到的键会覆盖之前的映射结果
内容的提问来源于stack exchange,提问作者user17446822
相关产品推荐
相关产品推荐

