首页 > 解决方案 > React JS如何用日期和数字转换这个对象数组?

问题描述

我有一个 React 组件,它从 get 调用中提取 JSON 数据,我需要重新格式化它(在数组操作方面我仍然是新手)。这是初始返回的 JSON:

{
"metrics": {
    "2018-12-26 18:00:00": {
        "20": 451,
        "30": 48
    },
    "2018-12-26 19:00:00": {
        "20": 165
    },
    "2018-12-27 00:00:00": {
        "20": 177,
        "30": 8
    },
    "2018-12-27 01:00:00": {
        "20": 220
    },
    "2018-12-27 02:00:00": {
        "20": 220
    },
    "2018-12-27 03:00:00": {
        "20": 177,
        "30": 8
    },
    "2018-12-27 04:00:00": {
        "20": 220
    },
    "2018-12-28 00:00:00": {
        "20": 93
    },
    "2018-12-28 01:00:00": {
        "20": 76
    },
    "2018-12-28 02:00:00": {
        "20": 76
    },
    "2018-12-28 03:00:00": {
        "20": 57
    },
    "2018-12-28 04:00:00": {
        "20": 76
    },
    "2018-12-28 15:00:00": {
        "20": 130,
        "30": 10
    }
}
}

我需要将它分成单独的日期并将“20”和“30”数字加在一起,这样每个日期我都会得到这样的结果:

"2018-12-26": { 
     "20": total number here,
     "30": total number here
 }

我知道这将涉及 Object.keys 并且可能会破坏,但我进展不快。任何帮助将不胜感激。

标签: javascriptarraysreactjs

解决方案


你可以这样做

所以这里的想法是首先创建一个empty object来存储我们的final output. 现在我们将遍历给定对象的所有键,并检查该键是否已经存在,output object如果不是,我们将相应的添加key's value到输出对象中,而不是在 中创建新属性output object

let data = { "metrics": { "2018-12-26 18:00:00": {"20": 451, "30": 48 },"2018-12-26 19:00:00": { "20": 165 },   "2018-12-27 00:00:00": { "20": 177, "30": 8 },  "2018-12-27 01:00:00": {  "20": 220 }, "2018-12-27 02:00:00": { "20": 220 }, "2018-12-27 03:00:00": {       "20": 177,  "30": 8   }, "2018-12-27 04:00:00": {       "20": 220  }, "2018-12-28 00:00:00": {  "20": 93  },   "2018-12-28 01:00:00": { "20": 76 },"2018-12-28 02:00:00": { "20": 76 }, "2018-12-28 03:00:00": {      "20": 57  }, "2018-12-28 04:00:00": { "20": 76 },   "2018-12-28 15:00:00": { "20": 130, "30": 10 }}}

let op = {}

for(let key in data['metrics']){
  let temp= new Date(key);
  let fullDate = temp.getFullYear()+'-'+temp.getMonth()+'-'+temp.getDate();
  if(op[fullDate]){
    for(let val in data['metrics'][key])
    {
      if(op[fullDate][val])
       op[fullDate][val] += data['metrics'][key][val]
      else op[fullDate][val] = data['metrics'][key][val]
    }
  } else {
    op[fullDate] = {...data['metrics'][key]};
  }

}

console.log(op);


推荐阅读