后台返回一个月的总数据,前端实现动态图标加载
因后台返回为全部数据,需要分段展示,实现无缝轮询,
let cremationList = [
{
"cremationDate": "2022-08-01",
"number": 210
},
{
"cremationDate": "2022-08-02",
"number": 150
},
{
"cremationDate": "2022-08-03",
"number": 50
},
{
"cremationDate": "2022-08-04",
"number": 100
},
{
"cremationDate": "2022-08-05",
"number": 110
},
{
"cremationDate": "2022-08-06",
"number": 90
},
{
"cremationDate": "2022-08-07",
"number": 40
},
{
"cremationDate": "2022-08-08",
"number": 70
},
{
"cremationDate": "2022-08-09",
"number": 180
},
{
"cremationDate": "2022-08-10",
"number": 200
},
{
"cremationDate": "2022-08-11",
"number": 110
},
{
"cremationDate": "2022-08-12",
"number": 120
},
]
需要把上述数据处理为下图效果
实现代码
let length = 7, arr = []
let returnArr = []
Array.prototype.remove = function (from, to) {
let rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
let dataArr = [], timeArr = []; //全部数据
let cremationNumData = [], cremationDate = []; //截取的数据
cremationList.forEach(n => {
let time = n.cremationDate.split('-')
time.remove(0)
time = time.join('-')
timeArr.push(time)
dataArr.push(n.number)
})
let s = 0
setInterval(() => {
const t = ++s;
if (t === timeArr.length) {
s = 0
}
let arr = getNumberArr(t, timeArr)
console.log(arr)
}, 1000)
function getNumberArr(start = 0, arr) {
let end = start + length
if (arr.length < end) {
returnArr = [...arr.slice(start, arr.length), ...arr.slice(0, end - arr.length)]
} else {
returnArr = arr.slice(start, end)
}
return returnArr
}