如何将具有嵌套对象复杂的数组对象转换为 CSV 文件

我需要帮助。我想循环数组嵌套对象如下图 1 并将数据变为 array2D 以将数据转换为 CSV 文件,但我不太了解循环我的数据以获取详细信息成为 array2D。或者任何人都可以通过其他方式将数据导出到 CSV 文件,并具有这样的输出。


图1:


var data = {

  deviceA: {

    smokeSensor: [

      {

        '190501': {

          '0001': 200,

          '0002': 300

        },

      },

      {

        '190502': {

          '0001': 20,

          '0002': 30

        },

      }

    ],

    fireSensor: [

      {

        '190501': {

          '0001': 700,

          '0002': 750

        },

      },

      {

        '190502': {

          '0001': 780,

          '0002': 630

        },

      }

    ]

  },

  deviceB: {

    smokeSensor: [

      {

        '190601': {

          '0001': 100,

          '0002': 110

        },

      },

      {

        '190602': {

          '0001': 120,

          '0002': 130

        },

      }

    ],

    fireSensor: [

      {

        '190601': {

          '0001': 600,

          '0002': 522

        },

      }

    ]

  },

};

这是我想用 array2D 获得的输出,以将其用于将 array2D 转换为 CSV 文件的函数。


const rows = [

  ["DeviceA"]

  ["Date/Time", "smokeSensor", "fireSensor"],

  ["190501 00:01", "200", "700"],

  ["190501 00:02", "300", "750"],

  ["190502 00:01", "20", "780"],

  ["190502 00:02", "30", "630"],

  [""],

  ["DeviceB"],

  ["Date/Time", "smokeSensor", "fireSensor"],

  ["190501 00:01", "100", "600"],

  ["190501 00:02", "110", "522"],

  ["190502 00:01", "120", ""],

  ["190502 00:02", "130", ""],

];

这是我尝试循环的代码,但在循环每个循环以获取日期时间值的每个细节时,我感到非常茫然。不幸的是,我得到了不符合要求的细节。


幕布斯6054654
浏览 163回答 1
1回答

ABOUTYOU

你可以使用类似下面的函数。该方法是迭代结构的键,按时间和小时/分钟字符串对传感器值进行分组,并将每个设备转储到结果行中。根据您的规范,进行了一些填充以确保行的宽度相同。稍微清理一下不会有什么坏处,但它似乎可以完成工作(我假设您的 DeviceB 输出是 上的错字"190501",这应该"190601"基于您的输入数据)。var data = { deviceA: { smokeSensor: [ { '190501': { '0001': 200, '0002': 300 }, }, { '190502': { '0001': 20, '0002': 30 }, } ], fireSensor: [ { '190501': { '0001': 700, '0002': 750 }, }, { '190502': { '0001': 780, '0002': 630 }, } ] }, deviceB: { smokeSensor: [ { '190601': { '0001': 100, '0002': 110 }, }, { '190602': { '0001': 120, '0002': 130 }, } ], fireSensor: [ { '190601': { '0001': 600, '0002': 522 }, } ] }, };const dataToCSV = data => {&nbsp; const rows = [];&nbsp; for (const device in data) {&nbsp; &nbsp; rows.push(&nbsp; &nbsp; &nbsp; [device.replace(/^./, m => m.toUpperCase())],&nbsp;&nbsp; &nbsp; &nbsp; ["Date/Time", ...Object.keys(data[device])]&nbsp; &nbsp; );&nbsp; &nbsp; const groups = {};&nbsp; &nbsp; let longest = 0;&nbsp; &nbsp; for (const sensor in data[device]) {&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; for (const time of data[device][sensor]) {&nbsp; &nbsp; &nbsp; &nbsp; const k = Object.keys(time)[0];&nbsp; &nbsp; &nbsp; &nbsp; for (const hm in time[k]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const groupKey = `${k} ${hm.replace(/(\d\d)(\d\d)/, "$1:$2")}`;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!(groupKey in groups)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; groups[groupKey] = [groupKey];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; groups[groupKey].push("" + time[k][hm]);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; longest = Math.max(longest, groups[groupKey].length);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; for (const group of Object.values(groups)) {&nbsp; &nbsp; &nbsp; while (group.length < longest) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; group.push("");&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; rows.push(group);&nbsp; &nbsp; }&nbsp; &nbsp; rows.push([""]);&nbsp; }&nbsp; return rows.slice(0, -1);};console.log(dataToCSV(data));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript