我的头撞在试图用lodash做以下事情的井上。我有一个带有更多嵌套对象的对象数组,看起来像这样:

[{
    id: 123,
    name: 'John',
    summary1: {
        count: 3,
        sum: 10,
    },
    summary2: {
        count: 10,
        sum: 20
    },
},
...
]

我想将此数组的每个元素转换成这样的东西:
[{
    id: 123,
    name: 'John',
    summary1_count: 3,
    summary1_sum: 10
    summary2_count: 10,
    summary2_sum: 20,
},
...
]

所以基本上,我想以某种方式“展平”数组的每个元素,以便根据主键和子键确定对象键。如何使用lodash或纯JS完成此操作?

您可以像示例中那样假设只有一级嵌套。

最佳答案

您可以通过遍历原始数组中每个项目的键,检查其类型,然后进一步遍历其内部键,构建新的键来保留正确的值,而无需lodash(或其他库)。

const array = [{
  id: 123,
  name: 'John',
  summary1: {
    count: 3,
    sum: 10
  },
  summary2: {
    count: 10,
    sum: 20
  }
}];


let newArray = array.map(item => {
  let newObj = {};

  Object.keys(item).forEach(key => {
    if (typeof item[key] === 'object') {
      Object.keys(item[key]).forEach(innerKey => {
        newObj[`${key}_${innerKey}`] = item[key][innerKey];
      });
    } else {
      newObj[key] = item[key];
    }
  });

  return newObj;
});

console.log(newArray);


当然,这不一定是非常漂亮或灵活的(遵循您对单个级别的假设)。

关于javascript - 用lodash展平嵌套的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44076106/

10-12 00:40
查看更多