zoukankan      html  css  js  c++  java
  • vue2.0中计算属性带参数、对像数组删除属性等的一些操作

    计算属性带参数及删除列的操作。

    obj是一个对像数组,原来的数据是直接绑定到el-table上的,但是ECharts中用不了那么多的列,这时就需要使用计算属性来删除一些列了。

    fileterStr是一个字符串,其实就是要删除的列,用"|"号来分割的,以便于转换成数组。

    this.$delete(item,f[i]);就是用来删除对像中指定keys的内容,这里用了一个for,用来删除每一行中的指定keys

     1     computed:{
     2         //对像转换成数据,供ECharts使用
     3         dataText:function(){
     4             return function(obj,filterStr){
     5                 var mainData=[];
     6                 var f=[];
     7                 if(filterStr.length>0){
     8                     f=filterStr.split('|');
     9                 }
    10                 if(obj.length>0){
    11                     var item=obj[0];
    12                     if(f.length>0){
    13                         for(var i=0;i<f.length;i++){
    14                             this.$delete(item,f[i]);
    15                         }
    16                     }
    17                     mainData.push(Object.keys(item));
    18                 }
    19                 for (var i=0;i<obj.length;i++){
    20                     var item=obj[i];
    21                     if(f.length>0){
    22                         for(var j=0;j<f.length;j++){
    23                             this.$delete(item,f[j]);
    24                         }
    25                     }
    26                     mainData.push(Object.values(item));
    27                 }
    28                 console.log(mainData);
    29                 return mainData;
    30             }
    31             
    32         },

     注意一下:

    后来发现使用Object.keys(item)有坑,虽然方便,但是经它处理过的数据顺序都乱了,就是说列的顺序乱了,不是按照原来的列来输出了,这肯定不行。

    想想还是用传统的方法吧,我们先实现一个功能,就是第二个参数做为数据列输出的顺序,如果有内容,则按指定的顺序列输出,并过滤掉没有指定的列数据,比如说原来数据有10列,你只指定了3列,那么就显示出来三列。如果参数为空,则按数据原有的顺序原样输出,不做更改。

    显示指定列数据

    修改后的代码如下,适用于已经知道列名称的情况下使用,对于行列转置动态生成的列,我们后面再说。

     1     computed:{
     2         //对像转换成数据,供ECharts使用,如果FilterStr有内容,则按指定的顺序生成数据,如果没有,则按原始的顺序生成数据
     3         dataText:function(){
     4             return function(obj,filterStr){
     5                 var mainData=[];
     6                 var f=[];
     7                 if(filterStr.length>0){
     8                     f=filterStr.split('|');
     9                 }
    10                 // if(obj.length>0){
    11                 //     var item=obj[0];
    12                 //     if(f.length>0){
    13                 //         for(var i=0;i<f.length;i++){
    14                 //             this.$delete(item,f[i]);
    15                 //         }
    16                 //     }
    17                 //     mainData.push(Object.keys(item));
    18                 // }
    19                 // for (var i=0;i<obj.length;i++){
    20                 //     var item=obj[i];
    21                 //     if(f.length>0){
    22                 //         for(var j=0;j<f.length;j++){
    23                 //             this.$delete(item,f[j]);
    24                 //         }
    25                 //     }
    26                 //     mainData.push(Object.values(item));
    27                 // }
    28 
    29                 //如果filterstr参数有内容,则使用指定的顺序来生成数据
    30                 if(filterStr.length>0){
    31                     mainData.push(f);  //标题列
    32                     for (var i=0;i<obj.length;i++){
    33                         var item=obj[i];
    34                         var subitem=[];
    35                         for(var j=0;j<f.length;j++){
    36                             for(var key in item){
    37                                 if(f[j]==key){//进行过滤
    38                                     subitem.push(item[key]);
    39                                 }
    40                             }
    41                         }
    42                         mainData.push(subitem)
    43                     }
    44                 }else{
    45                 //如果参数没有内容,则按原顺序生成数据
    46                     var titleitem=[];
    47                     for(var key in obj[0]){
    48                         titleitem.push(key);
    49                     }
    50                     mainData.push(titleitem);//标题列
    51 
    52                     for(var i=0;i<obj.length;i++){
    53                         var item=obj[i];
    54                         var subitem=[];
    55                         for(var key in item){
    56                             subitem.push(item[key]);
    57                         }
    58                         mainData.push(subitem)
    59                     }
    60 
    61                 }
    62                 console.log(mainData);
    63                 return mainData;
    64             }
    65             
    66         },
  • 相关阅读:
    iOS UITableView的cell重用标识
    iOS SDWebImage清理缓存数据
    iOS UITextView 根据输入text自适应高度
    iOS 网络请求 NSURLSession 的上传文件方法
    iOS开发之tintColor属性详解
    iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置
    iOS9 Xcode7 设置Launch Image 启动图片
    iOS
    iOS 浅谈AFNetworking网络请求
    贝塞尔曲线
  • 原文地址:https://www.cnblogs.com/wjbych/p/13754965.html
Copyright © 2011-2022 走看看