之前博文中写过通过相同项匹配的,这里不赘述
项目需求:统计各个APP从当前周往前推5周,也就是最近六周的点击量,因为后台返回的数据中,有些周是不存在的,虽然已跟后台说没有点击量的要为0,但是为了稳妥起见,还是需要前端进行数据处理,毕竟最可靠的还是自己,来,看下后台返回的数据格式:
这就是后台返回的数据,其中缺少了部分周的数据,因为我这里使用了vue,而且数据是绑定到echarts上的,所以我需要的最后的数据只有周数和点击量
1.先获取最近六周的周数列表:
1 setWeek () { 2 let d1 = new Date() 3 let d2 = new Date() 4 d2.setMonth(0) 5 d2.setDate(1) 6 let rq = d1-d2 7 let s1 = Math.ceil(rq/(24*60*60*1000)) 8 let sWeek = Math.ceil(s1/7) 9 let week = [] 10 if (sWeek >= 6) { 11 for (let i=0; i < 6; i++) { 12 week.push((sWeek - i)) 13 } 14 } 15 return week.reverse() 16 },
在mounted中保存:
1 this.weekList = this.setWeek()
OK,这是周数列表:
2.对数据进行处理:
1 let dataB = data //另存返回的数据 2 let nameList = [] //名称列表,在这里其实就是周数的列表,因为我数据绑定到echarts,所以需要对应的横坐标 3 let seriesList = [] //数据列表 4 for (let i=0; i<dataB.length; i++) { 5 let nullSeries = {} 7 let oneData = dataB[i].data.map((item) => {return item.tWeek}) //把里层的data的周拿出来 8 let nullData = [] //定义空的data来保存当前数据 9 for (let j=0; j<self.weekList.length; j++) { //以之前获取的weekList为标准 10 if (oneData.indexOf(self.weekList[j]) > -1) { //如果里层data周数存在的话 11 let obj = {} 12 obj = dataB[i].data.find((item) => { //匹配得到当前周数的数据 13 return item.tWeek == self.weekList[j] 14 }) 15 nullData.push(obj.tNum) //将点击量存入空的data中 16 } else { 17 nullData.push('0') //如果不存在这周,我就让他的点击量为0 18 } 19 } 20 nullSeries.name = dataB[i].name //APP的名字 21 nullSeries.type = 'line' 22 nullSeries.smooth = true 23 nullSeries.data = nullData 24 seriesList.push(nullSeries) //保存本条数据 25 nameList.push(dataB[i].name) 26 }
OK,这是处理完以后的数据:
希望本文对你有所帮助!