用对象中的值交换键

新手上路,请多包涵

我有一个非常大的 JSON 对象,其结构如下:

 {A : 1, B : 2, C : 3, D : 4}

我需要一个可以用对象中的键交换值的函数,但我不知道该怎么做。我需要这样的输出:

 {1 : A, 2 : B, 3 : C, 4 : D}

有什么办法可以手动创建一个交换所有内容的新对象吗?

谢谢

原文由 C1D 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 763
2 个回答
function swap(json){
  var ret = {};
  for(var key in json){
    ret[json[key]] = key;
  }
  return ret;
}

这里的示例 FIDDLE 不要忘记打开您的控制台以查看结果。


ES6 版本:

 static objectFlip(obj) {
  const ret = {};
  Object.keys(obj).forEach(key => {
    ret[obj[key]] = key;
  });
  return ret;
}

或者使用 Array.reduce() & Object.keys()

 static objectFlip(obj) {
  return Object.keys(obj).reduce((ret, key) => {
    ret[obj[key]] = key;
    return ret;
  }, {});
}

或者使用 Array.reduce() & Object.entries()

 static objectFlip(obj) {
  return Object.entries(obj).reduce((ret, entry) => {
    const [ key, value ] = entry;
    ret[ value ] = key;
    return ret;
  }, {});
}

原文由 jPO 发布,翻译遵循 CC BY-SA 4.0 许可协议

现在我们有了 Object.fromEntries:

 const f = obj => Object.fromEntries(Object.entries(obj).map(a => a.reverse()))

console.log(
  f({A : 'a', B : 'b', C : 'c'})
) // => {a : 'A', b : 'B', c : 'C'}

或者:

 const f = obj => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]))

console.log(
  f({A : 'a', B : 'b', C : 'c'})
) // => {a : 'A', b : 'B', c : 'C'}

(更新以删除多余的括号 - 感谢@devin-g-rhode)

原文由 Sc0ttyD 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题