恢复对象及其属性

时间:2013-07-23 18:08:10

标签: javascript object

我有一个对象

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
    }
};

2 个答案:

答案 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;
  };