洗数据

2018-11-01  本文已影响0人  李昂李三光

从ajax请求回来的数据,经常是没有进行分类的,但是有时候需要进行分类,就必须做一件事,那就是洗数据


经过洗数据之后组件能够分类显示

在洗数据的时候,需要把数据结构进行改造,以方便组件在页面的渲染

{
  [
      {
          comingTitle:"11月1日 周四",
          items:[{...},{...},...]
      },
      {
          comingTitle:"11月2日 周五",
          items:[{...},{...},...]
      }
  ]
}

这种结构里面嵌套了两层数组,很显然这并不适合组件的渲染,需要将结构再次改造

{
    11月1日 周四:{
          comingTitle:"11月1日 周四",
          items:[{...},{...},...]
      },
    11月2日 周五:{
          comingTitle:"11月2日 周五",
          items:[{...},{...},...]
      }
}

这种结构相对起来就清晰很多,因此以下代码就会实现这种结构

在mounted钩子里面定义一个处理数据的内部函数

            _handleList(coming){
//              console.log(coming);
                var obj={}
                coming.forEach((el)=>{
//                  属性名默认为undefined,取反成为布尔值就变成true
                    if(!obj[el.comingTitle]){
//                      将日期赋值给对象的键名
                        obj[el.comingTitle]={
                            comingTitle:el.comingTitle,
//                          创建数组,稍后将内容转移至数组
                            items:[]
                        }
                    }
//                  将内容转移至数组
                    obj[el.comingTitle].items.push(el)
                })
//              console.log(obj)
//              组件内定义好的对象名指向完成的对象
                this.handleObj=obj;
                console.log(obj)
            }

处理获取下来的数据

            _initData(baseUrl){
                        return new Promise((resolve,reject)=>{
                            var xhr = new XMLHttpRequest();
                            xhr.open("GET",baseUrl);
                            xhr.send();
                            xhr.addEventListener("readystatechange",function(){
                                if(xhr.readyState==4){
                                    if(xhr.status==200){
                                        resolve(xhr.response);
                                    }
                                }
                                
                            })
                        }).then((res)=>{
                            this.list=JSON.parse(res).movieList;
//                          this.comingTitle=this.list[0].comingTitle;
                            this._handleList(this.list)
                            
                        })
                    }

在页面使用双重循环,就能够渲染出分类的效果

    <div v-for="(value,key) in handleObj">{{value.comingTitle}}
    <div v-for="(item,index) in value.items">{{item.nm}}</div>
上一篇下一篇

猜你喜欢

热点阅读