首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象的Pivot或GroupBy对象转换为Javascript中的对象数组

将对象的Pivot或GroupBy对象转换为Javascript中的对象数组
EN

Stack Overflow用户
提问于 2020-05-16 23:43:20
回答 1查看 40关注 0票数 0

我有以下JavaScript对象。我需要从给定的对象生成一个新的对象数组。在JavaScript中我应该采取什么方法?

代码语言:javascript
复制
const ObjOfObj = {
  'virus': [
    {
      '2016': 67,
      '2017': 59,
      '2018': 18,
      '2019': 1
    }
  ],
  'cure': [
    {
      '2016': 51,
      '2017': 50,
      '2018': 16,
      '2019': 1
    }
  ]
};

如何转换或透视以生成以下对象数组?

代码语言:javascript
复制
const ArrOfObj = [
  {'year': '2016', 'virus': 67, 'cure' : 51},
  {'year': '2017', 'virus': 59, 'cure' : 50},
  {'year': '2018', 'virus': 18, 'cure' : 16},
  {'year': '2019', 'virus': 1, 'cure' : 1},
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-16 23:59:38

您可以像这样使用reduce函数。

代码语言:javascript
复制
const ObjOfObj = {
  'virus': [
    {
      '2016': 67,
      '2017': 59,
      '2018': 18,
      '2019': 1
    }
  ],
  'cure': [
    {
      '2016': 51,
      '2017': 50,
      '2018': 16,
      '2019': 1
    }
  ]
};

const groupBy = (obj) => {
  const keys = Object.keys(obj);
  const mapping = keys.reduce((acc, k) => {
    obj[k].forEach(item => {
      Object.keys(item).forEach(yearKey => {
        tracked = acc[yearKey];
        if (!tracked) {
          acc[yearKey] = {
            year: yearKey
          };
        }
        acc[yearKey][k] = (acc[yearKey][k] | 0) + item[yearKey];
      });
    });
    return acc;
  }, {});
  return Object.entries(mapping);
};

console.log(groupBy(ObjOfObj));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61839389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档