兩個數組通過相同項,匹配得到新數組對象


之前博文中寫過通過相同項匹配的,這里不贅述

項目需求:統計各個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,這是處理完以后的數據:

 

 希望本文對你有所幫助!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM