我有一个非常大的 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;
}, {});
}
您可以使用lodash 函数 _.invert它也可以使用 multivlaue
var object = { 'a': 1, 'b': 2, 'c': 1 };
_.invert(object);
// => { '1': 'c', '2': 'b' }
// with `multiValue`
_.invert(object, true);
// => { '1': ['a', 'c'], '2': ['b'] }
使用 ES6:
const obj = { a: "aaa", b: "bbb", c: "ccc", d: "ddd" };
Object.assign({}, ...Object.entries(obj).map(([a,b]) => ({ [b]: a })))
现在我们有了 Object.fromEntries:
obj => Object.fromEntries(Object.entries(obj).map(a => a.reverse()))
或者
obj => Object.fromEntries(Object.entries(obj).map(([k, v]) => [v, k]))
(更新以删除多余的括号 - 感谢 @devin-g-rhode)
获取对象的key,然后使用Array的reduce函数遍历每个key,设置value为key,key为value。
const data = {
A: 1,
B: 2,
C: 3,
D: 4
}
const newData = Object.keys(data).reduce(function(obj, key) {
obj[data[key]] = key;
return obj;
}, {});
console.log(newData);