首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一个对象转换为另一个对象结构

将一个对象转换为另一个对象结构
EN

Code Review用户
提问于 2020-01-24 12:46:01
回答 2查看 1.3K关注 0票数 5

我有这样一个输入对象,我应该修改它,以便与一些图表库一起使用它。

代码语言:javascript
运行
复制
const input = {
  foo: {
    bar: 'biz',
  },
  statistic: {
    "2019-11": {
      A: 11,
      B: 11,
      C: 11,
      D: 11,
      E: 11,
    },
    "2019-12": {
      A: 12,
      B: 12,
      C: 12,
      D: 12,
      E: 12,
    },
    ....
  }
};

我的库需要这样的输入:

代码语言:javascript
运行
复制
[ 
  { subject: 'A', '2019-11': 11, '2019-12': 12 },
  { subject: 'B', '2019-11': 11, '2019-12': 12 },
  { subject: 'C', '2019-11': 11, '2019-12': 12 },
  { subject: 'D', '2019-11': 11, '2019-12': 12 },
  { subject: 'E', '2019-11': 11, '2019-12': 12 } 
]

这是我目前的解决方案:

代码语言:javascript
运行
复制
const transform = arg => {
  const keys = ['A', 'B', 'C', 'D', 'E'];
  return _.map(keys, key => {
    const data = _.reduce(arg.statistic, (result, value, k) => {
      result[k] = value[key];
      return result;
    }, {});
    return {
      subject: key,
      ...data
    }
  });
}

任何改进都将是非常欢迎的!

EN

回答 2

Code Review用户

回答已采纳

发布于 2020-01-25 04:13:24

这里有五个数据序列(A到E)?当您有4或6个数据系列时,会发生什么?你真的想重写你的代码吗?

另外,除非你有理由这样做,否则这些简单的数据转换似乎没有必要。我猜想,使用ES6 Array.map、Array.reduce和类似的工具会做同样的事情,同时也会产生一种更流畅、更易读的风格。

票数 2
EN

Code Review用户

发布于 2020-01-25 05:38:26

使用reduce构建映射对象听起来是错误的。根据定义,减少一词的意思是“使更小”,但你在这里使用它“使更大”。第一步可能是:

代码语言:javascript
运行
复制
const data = {};
_.foreach(arg.statistic, (key, value) => data[key] = value);

我不知道寄宿是否真的有foreach,这只是为了说明这个想法。

可能还有一种更优雅的方法从数据中创建此地图。

票数 -1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/236112

复制
相关文章

相似问题

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