如何将JS数组对象格式从{toolName, normName, timeRange, value}转换为{toolName: [{normName, timeRange[], value[]}]}?

如何将JS数组对象格式从{toolName, normName, timeRange, value}转换为{toolName: [{normName, timeRange[], value[]}]}?

javascript数组对象格式转换:从扁平结构到嵌套结构

本文介绍如何将JavaScript数组对象从 {toolName, normName, timeRange, value} 格式转换为 {toolName: [{normName, timeRange[], value[]}]} 格式。

原始数据结构:

[    {        toolName: "手机",        normName: "营销量",        timeRange: "2021-11",        value: 145    },    // ...更多数据]

目标数据结构:

[    {        "手机":[            {                normName: "营销量",                timeRange: ["2021-11", '2021-12'], //举例,实际时间范围根据数据而定                value: [145, 42] //举例,实际值根据数据而定            },            // ...更多数据        ]    },    // ...更多数据]

解决方案:

以下代码使用reduce函数和Object.entries方法实现转换:

function transformData(data) {  // 使用reduce函数将数据按照toolName分组  const groupedData = data.reduce((result, item) => {    (result[item.toolName] = result[item.toolName] || []).push(item);    return result;  }, {});  // 使用Object.entries将分组后的数据转换为数组,并进行进一步转换  return Object.entries(groupedData).map(([toolName, items]) => ({    [toolName]: items.reduce((toolResult, item) => {      const normNameIndex = toolResult.findIndex(i => i.normName === item.normName);      if (normNameIndex === -1) {        toolResult.push({          normName: item.normName,          timeRange: [item.timeRange],          value: [item.value]        });      } else {        toolResult[normNameIndex].timeRange.push(item.timeRange);        toolResult[normNameIndex].value.push(item.value);      }      return toolResult;    }, [])  }));}// 示例数据const originalData = [    {toolName: "手机", normName: "营销量", timeRange: "2021-11", value: 145},    {toolName: "手机", normName: "营销量", timeRange: "2021-12", value: 42},    {toolName: "电脑", normName: "销售额", timeRange: "2021-11", value: 1000},    {toolName: "电脑", normName: "销售额", timeRange: "2021-12", value: 1200}];// 转换数据const transformedData = transformData(originalData);console.log(transformedData);

代码说明:

第一个reduce函数: 根据toolName将原始数据分组到一个对象中,其中键是toolName,值是具有相同toolName的项的数组。

Object.entries: 将分组后的对象转换为键值对数组。

第二个reduce函数: 遍历每个toolName的项数组,根据normName进一步分组。如果normName已经存在,则将timeRangevalue添加到相应的数组中;如果不存在,则创建一个新的对象并添加到结果数组中。

这个改进后的代码更清晰地处理了多个相同normName的情况,避免了原代码中可能出现的错误。 它确保了timeRangevalue正确地添加到各自的数组中。

这个方法有效地将扁平的数组对象转换为嵌套结构,方便后续数据处理和展示。 请确保你的输入数据符合预期格式,否则可能需要进行预处理。

以上就是如何将JS数组对象格式从{toolName, normName, timeRange, value}转换为{toolName: [{normName, timeRange[], value[]}]}?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1561465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月22日 06:31:20
下一篇 2025年12月22日 06:31:28

相关推荐

发表回复

登录后才能评论
关注微信