交换对象中值的键
2022-08-30 02:27:48
我有一个非常大的JSON对象,结构如下:
{A : 1, B : 2, C : 3, D : 4}
我需要一个函数,可以用对象中的键交换值,我不知道该怎么做。我需要这样的输出:
{1 : A, 2 : B, 3 : C, 4 : D}
有没有办法做到这一点,手动创建一个新对象,其中所有内容都被交换?
谢谢
我有一个非常大的JSON对象,结构如下:
{A : 1, B : 2, C : 3, D : 4}
我需要一个函数,可以用对象中的键交换值,我不知道该怎么做。我需要这样的输出:
{1 : A, 2 : B, 3 : C, 4 : D}
有没有办法做到这一点,手动创建一个新对象,其中所有内容都被交换?
谢谢
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;
}, {});
}
现在我们有了 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)