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         },
原文地址:https://www.cnblogs.com/wjbych/p/13754965.html