亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將具有嵌套對象復雜的數組對象轉換為 CSV 文件

如何將具有嵌套對象復雜的數組對象轉換為 CSV 文件

幕布斯6054654 2021-06-11 18:47:07
我需要幫助。我想循環數組嵌套對象如下圖 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", ""],];這是我嘗試循環的代碼,但在循環每個循環以獲取日期時間值的每個細節時,我感到非常茫然。不幸的是,我得到了不符合要求的細節。
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

你可以使用類似下面的函數。該方法是迭代結構的鍵,按時間和小時/分鐘字符串對傳感器值進行分組,并將每個設備轉儲到結果行中。根據您的規范,進行了一些填充以確保行的寬度相同。


稍微清理一下不會有什么壞處,但它似乎可以完成工作(我假設您的 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 => {

  const rows = [];


  for (const device in data) {

    rows.push(

      [device.replace(/^./, m => m.toUpperCase())], 

      ["Date/Time", ...Object.keys(data[device])]

    );

    const groups = {};

    let longest = 0;


    for (const sensor in data[device]) {  

      for (const time of data[device][sensor]) {

        const k = Object.keys(time)[0];


        for (const hm in time[k]) {

          const groupKey = `${k} ${hm.replace(/(\d\d)(\d\d)/, "$1:$2")}`;


          if (!(groupKey in groups)) {

            groups[groupKey] = [groupKey];

          }


          groups[groupKey].push("" + time[k][hm]);

          longest = Math.max(longest, groups[groupKey].length);

        }

      }

    }


    for (const group of Object.values(groups)) {

      while (group.length < longest) { 

        group.push("");

      }


      rows.push(group);

    }


    rows.push([""]);

  }


  return rows.slice(0, -1);

};


console.log(dataToCSV(data));


查看完整回答
反對 回復 2021-06-24
  • 1 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號