将嵌套对象转换为数组

时间:2015-01-27 20:36:30

标签: javascript arrays node.js object data-conversion

我有一个包含其他对象的对象,例如:

let foo = {
  a: {
    b: {},
    c: {}
  },
  d: {
    e: {}
  }
};

现在我想将它转换为一个对象数组,其中前两个关键字的键形成一个键/值对,例如:

let transformedFoo = [
  { outer: 'a', inner: 'b' },
  { outer: 'a', inner: 'c' },
  { outer: 'd', inner: 'e' }
];

我目前的做法如下:

let fooTransformed = [];

Object.keys(foo).forEach(function (outerKey) {
  Object.keys(foo[outerKey]).forEach(function (innerKey) {
    fooTransformed.push({
      outer: outerKey,
      inner: innerKey
    });
  });
});

它有效,但我认为它不是很好的" (即,有两个嵌套循环并不好)。有没有更好的方法来实现这一点(我可以想象有一个非常优雅的纯功能解决方案,但我无法想到任何一个)?

1 个答案:

答案 0 :(得分:2)

使用map并减少:

> Object.keys(foo).map(function(key) { 
      return Object.keys(foo[key]).map(function(val) {
          return {outer: key, inner: val} } ) 
      }).reduce(function(a,b) { return a.concat(b) })

[ { outer: 'a', inner: 'b' },
  { outer: 'a', inner: 'c' },
  { outer: 'd', inner: 'e' } ]