您好,匿名用户

请教一下javascript 数据格式转换问题

0 投票

有一个原始数组格式如下

[
    {
        Voltage:[
                    {value: "-", timestamp: 1551082567000, status: -2}
                    {value: 125, timestamp: 1551082321000, status: 1}
                    {value: 123, timestamp: 1551082251000, status: 1}
               ]
     },
      {
        Ammeter:[ 
                    {value: 20, timestamp: 1551082567000, status: -2}
                    {value: 15, timestamp: 1551082321000, status: 1}
                    {value: 13, timestamp: 1551082251000, status: 1}
               ]
     }
 ]

Voltage和Ammeter名称都是动态改变的。

请问一下如何才能使这个数组转换成以下格式?

[
    {Voltage:'-',Ammeter:20,timestamp: 1551082567000, Voltage_status: -2,Ammeter_status:-2},
    {Voltage:125,Ammeter:15,timestamp: 1551082321000, Voltage_status: 1,Ammeter_status:1},
    {Voltage:123,Ammeter:13,timestamp: 1551082251000, Voltage_status: 1,Ammeter_status:1}
]

谢谢大家不吝赐教!

用户头像 提问 5月16日 @ 河蟹 中士 (1,371 威望)
分享到:

1个回答

0 投票
 
最佳答案
function transformData(original) {
  const mapOriginal = original
    .map(item => Object.keys(item).map(category => item[category].map(categoryData => ({
      ...categoryData,
      [category]: categoryData.value,
      [`${category}_status`]: categoryData.status,
    }))))
    .reduce((a, b) => (a.reduce((p, n) => p.concat(n)))
      .concat(
        (b.reduce((p, n) => p.concat(n)))
      )
    )
  const obj = {}
  mapOriginal.forEach(d => {
    if (!obj[d.timestamp]) {
      obj[d.timestamp] = d
    }
    Object.assign(obj[d.timestamp], d)
  })
  return Object.values(obj).map(item => {
    delete item['value']
    delete item['status']
    return item
  })
}
用户头像 回复 5月16日 @ Taurus 中士 (1,198 威望)
选中 5月12日 @河蟹
提一个问题:

相关问题

0 投票
1 回复 203 阅读
0 投票
1 回复 5 阅读
0 投票
1 回复 90 阅读
用户头像 提问 2017年 2月13日 @ Cassiopeia 中士 (1,302 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...