3

我有一个对象

var obj = {
   prop1 : {
      dummy1 : 0,
      dummy2 : 0,
      dummy3 : 0
   },
   prop2 : {
      dummy1 : 0,
      dummy2 : 0,
      dummy3 : 0
   }
};

我需要恢复它,以便 dummy 成为一个对象,然后 props 成为它的属性。

所以我需要我的对象看起来像这样

var obj = {
    dummy1 : {
        prop1 : 0,
        prop2 : 0   
    },
    dummy2 : {
        prop1 : 0,
        prop2 : 0
    },
    dummy3 : {
        prop1 : 0,
        prop2 : 0
    }
};
4

2 回答 2

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}
} */

您可能还想检查属性是否被继承等。

于 2013-07-23T18:16:56.773 回答
1

下划线有一个功能可以做类似的事情。您可以使用

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;
  };
于 2013-07-23T18:10:27.253 回答