交换对象中值的键

2022-08-30 02:27:48

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

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

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

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

有没有办法做到这一点,手动创建一个新对象,其中所有内容都被交换?
谢谢


答案 1
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;
  }, {});
}

答案 2

现在我们有了 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)