两个数组通过相同项,匹配得到新数组对象

之前博文中写过通过相同项匹配的,这里不赘述

项目需求:统计各个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,这是处理完以后的数据:

 

 希望本文对你有所帮助!

 

posted on 2018-07-11 14:50  王子乔  阅读(6445)  评论(0编辑  收藏  举报

导航