鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 有一個時間數(shù)組對象,時次不連續(xù),怎樣補全比較好?

有一個時間數(shù)組對象,時次不連續(xù),怎樣補全比較好?

需要展示出一天中所有小時的數(shù)據(jù),后端返回的數(shù)據(jù)是這樣
beforData: [

  {
    "time_hours": "09", // 時間
    "approved_amount": 28068.0,
    "pass_rate": 1.0
  },
  {
    "time_hours":"10",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours":"11",
    "approved_amount":42706.0,
    "pass_rate":0.5
  },
  {
    "time_hours":"13",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours":"15",
    "approved_amount":37700.0,
    "pass_rate":0.5714285714
  },
  {
    "time_hours":"16",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours":"17",
    "approved_amount":29520.0,
    "pass_rate":0.6
  },
  {
    "time_hours":"18",
    "approved_amount":0.0,
    "pass_rate":0.0
  },{
    "time_hours":"19",
    "approved_amount":56216.0,
    "pass_rate":1.0
  },
  {
    "time_hours":"22",
    "approved_amount":5800.0,
    "pass_rate":1.0
  },
  {
    "time_hours":"23",
    "approved_amount":0.0,
    "pass_rate":0.0
  }
]

需要將缺少的小時補全,轉(zhuǎn)化成
[

  {
    "time_hours": "01:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "02:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "03:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "04:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "05:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "06:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "07:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "08:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "09:00",
    "approved_amount": 28068.0,
    "pass_rate": 1.0
  },
  {
    "time_hours":"10:00",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours":"11:00",
    "approved_amount":42706.0,
    "pass_rate":0.5
  },
  {
    "time_hours": "12:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours":"13:00",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours": "14:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours":"15:00",
    "approved_amount":37700.0,
    "pass_rate":0.5714285714
  },
  {
    "time_hours":"16:00",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours":"17:00",
    "approved_amount":29520.0,
    "pass_rate":0.6
  },
  {
    "time_hours":"18:00",
    "approved_amount":0.0,
    "pass_rate":0.0
  },{
    "time_hours":"19:00",
    "approved_amount":56216.0,
    "pass_rate":1.0
  },
  {
    "time_hours": "20:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours": "21:00",
    "approved_amount": null,
    "pass_rate": null,
  },
  {
    "time_hours":"22:00",
    "approved_amount":5800.0,
    "pass_rate":1.0
  },
  {
    "time_hours":"23:00",
    "approved_amount":0.0,
    "pass_rate":0.0
  },
  {
    "time_hours": "00:00",
    "approved_amount": null,
    "pass_rate": null,
  },
]
這樣的,請教一下大家這個要怎么做?。?/code>
回答
編輯回答
祈歡

Array.prototype.map

2018年4月3日 23:02
編輯回答
不討喜

不謝,拿走:

const beforeData = [{
  "time_hours": "09", // 時間
  "approved_amount": 28068.0,
  "pass_rate": 1.0
}];

const result = Array.from({length: 24}, (v, i) => i).map(hour => {
  let obj = beforeData.filter(has => Number(has.time_hours) === hour)[0] || {};
  return {
    time_hours: `${`00${hour}`.slice(-2)}:00`,
    approved_amount: obj.approved_amount || null,
    pass_rate: obj.pass_rate || null
  };
});

console.log(result);

就這么簡單~~~

2018年8月13日 12:24
編輯回答
卟乖

補充一個線性時間復(fù)雜度的

function getFullRange (beforeData) {
  return beforeData
    .reduce((arr, item) => {
      arr[+item.time_hours] = item
      return arr
    }, [...new Array(24)])
    .map((item, i) => {
      if (!item) {
        item = {
          time_hours: String(i),
          approved_amount: null,
          pass_rate: null,
        }
      }
      item.time_hours = item.time_hours.padStart(2, '0') + ':00'
      return item
    })
}
2017年9月21日 13:13
編輯回答
涼薄
  let completeData = [{'time_hours': '01:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '02:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '03:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '04:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '05:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '06:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '07:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '08:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '09:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '10:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '11:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '12:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '13:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '14:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '15:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '16:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '17:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '18:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '19:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '20:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '21:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '22:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '23:00', 'approved_amount': null, 'pass_rate': null}, {'time_hours': '00:00', 'approved_amount': null, 'pass_rate': null}]
  let afterData = completeData.map(val => {
    let res = beforData.find(v => v.time_hours === val.time_hours.slice(0, 2))
    res ? res.time_hours = val.time_hours : res = val
    return res
  })
  console.log(afterData)

既然結(jié)果是固定的 就反過來遍歷唄

2017年6月5日 04:27
編輯回答
淺淺
var data = [{
  "time_hours": "09", // 時間
  "approved_amount": 28068.0,
  "pass_rate": 1.0
},
{
  "time_hours":"10",
  "approved_amount":0.0,
  "pass_rate":0.0
},
{
  "time_hours":"11",
  "approved_amount":42706.0,
  "pass_rate":0.5
},
{
  "time_hours":"13",
  "approved_amount":0.0,
  "pass_rate":0.0
},
{
  "time_hours":"15",
  "approved_amount":37700.0,
  "pass_rate":0.5714285714
},
{
  "time_hours":"16",
  "approved_amount":0.0,
  "pass_rate":0.0
},
{
  "time_hours":"17",
  "approved_amount":29520.0,
  "pass_rate":0.6
},
{
  "time_hours":"18",
  "approved_amount":0.0,
  "pass_rate":0.0
},{
  "time_hours":"19",
  "approved_amount":56216.0,
  "pass_rate":1.0
},
{
  "time_hours":"22",
  "approved_amount":5800.0,
  "pass_rate":1.0
},
{
  "time_hours":"23",
  "approved_amount":0.0,
  "pass_rate":0.0
}]

function trans (data) {
  let result = []
  let cur = 1
  function format(time) {
    time = time < 10 ? '0' + time : time
    return time + ':00'
  }
  function genRange(i, j) {
    let result = []
    for (; i < j; i++) {
      result.push({time_hours: format(i), approved_amount: null, pass_rate: null})
    }
    return result
  }
  data.forEach(item => {
    let now = +item.time_hours
    if (cur !== now) result = result.concat(genRange(cur, now))
    result.push(Object.assign({}, item, {time_hours: format(now)}))
    cur = now + 1
  })
  if (cur < 25) result = result.concat(genRange(cur, 25))
  return result
}
let result = trans(data)
2018年2月1日 02:23