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 },