我有一个对象
var obj = {
prop1 : {
dummy1 : 0,
dummy2 : 0,
dummy3 : 0
},
prop2 : {
dummy1 : 0,
dummy2 : 0,
dummy3 : 0
}
};
我需要恢复这个,以便虚拟成为一个对象,然后道具成为它的属性。
所以我需要我的对象看起来像这样
var obj = {
dummy1 : {
prop1 : 0,
prop2 : 0
},
dummy2 : {
prop1 : 0,
prop2 : 0
},
dummy3 : {
prop1 : 0,
prop2 : 0
}
};
答案 0 :(得分:3)
这可以通过两个for..in
循环来实现
var obj = {
prop1 : {dummy1 : 0, dummy2 : 0, dummy3 : 0},
prop2 : {dummy1 : 0, dummy2 : 0, dummy3 : 0}
};
// start of interesting code
var a, b,
o2 = {};
for (a in obj)
for (b in obj[a]) {
if (!o2[b]) o2[b] = {}; // if o2 doesn't have this yet, make new obj
o2[b][a] = obj[a][b]; // swap
}
o2; /* {
"dummy1": {"prop1": 0, "prop2": 0},
"dummy2": {"prop1": 0, "prop2": 0},
"dummy3": {"prop1": 0, "prop2": 0}
} */
您可能还想检查属性是否未继承等等。
答案 1 :(得分:1)
Underscore有一个类似于此的功能。你可以使用
http://underscorejs.org/#invert
作为起点。
https://github.com/jashkenas/underscore/blob/master/underscore.js#L770
_.invert = function(obj) {
var result = {};
for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
return result;
};