之前博文中寫過通過相同項匹配的,這里不贅述
項目需求:統計各個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,這是處理完以后的數據:

希望本文對你有所幫助!
