该怎么转换这个 数组

有一个数组,它的格式如下:
[
{

  'ID':5733,
  'TimeStr':'2019/01/07 10:00:00',
  'spyj':'ssssssssssss',
  'time1':'2019/01/08 10:00:00',
  'hj1':'stat1',
  'time2':'2019/01/09 10:00:00',
   'hj2':'stat2',
  'time3':'2019/01/10 10:00:00',
   'hj3':'stat3',

}
]

我想把它转换成这样格式:
[
{'starttime':'2019/01/07 10:00:00','endtime':'2019/01/08 10:00:00','hj1':'stat1'},
{'starttime':'2019/01/08 10:00:00','endtime':'2019/01/09 10:00:00','hj2':'stat2'},
{'starttime':'2019/01/09 10:00:00','endtime':'2019/01/10 10:00:00','hj3':'stat3'}
]
规则是这样的。开始时间starttime初始为TimeStr,结束时间是time1,下一个 开始时间starttime是time1,下一个结束时间是time2,再下一个 开始时间starttime是time2,再下一个结束时间是time3,依此类推,我该怎么写呢?

阅读 1.4k
1 个回答
    let arr = [
        {
        
          'ID':5733,
          'TimeStr':'2019/01/07 10:00:00',
          'spyj':'ssssssssssss',
          'time1':'2019/01/08 10:00:00',
          'hj1':'stat1',
          'time2':'2019/01/09 10:00:00',
           'hj2':'stat2',
          'time3':'2019/01/10 10:00:00',
           'hj3':'stat3',
        }
    ]
    
    function translateArr (arr) {
        return arr.reduce((temp, item) => {
    
            let keys = Object.keys(item).filter(key => /(TimeStr)|(time[\d])/.test(key)).sort()
    
            keys.forEach((key, i) => {
                if (i === keys.length - 1) return
                temp.push({
                    starttime: item[key],
                    endtime: item[keys[i + 1]],
                    ['hj' + (i + 1)]: item[ 'hj' + ( i + 1) ]
                })      
            })  
            return temp
        }, [])
    }
    
   translateArr(arr)

    /* 看看我得到了什么   不知道你原始数组里面有多少个这样的对象 所以写复杂了一些
       [ 
        {starttime: "2019/01/07 10:00:00", endtime: "2019/01/08 10:00:00", hj1: "stat1"},
        {starttime: "2019/01/08 10:00:00", endtime: "2019/01/09 10:00:00", hj2: "stat2"},
        {starttime: "2019/01/09 10:00:00", endtime: "2019/01/10 10:00:00", hj3: "stat3"}
       ]
    */
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题