工作中数据处理相关知识点01
1.求数组元素所占百分比:
1 function Percentage(number1, number2) { 2 return (Math.round(num / total * 10000) / 100.00 + "%");// 小数点后两位百分比 3 }
2.$.map与$.each比较:
1 var arr1 = {'yj':'yu','name':'jian'}; 2 //arr2 = ['yu','jian'] 3 var arr2 = $.map(arr1, function (v,k) {return v }); 4 var arr1 = [0, 3, 5]; 5 //arr2 = [0,3,5] 6 var arr2 = $.map(arr1, function (v,k) { return v });
- $.each修改原数组;
3.convert后端数据转换:
1 var mapDataParser = new (Stats.ResultParser.extend({ 2 doParse: function(data,num) { 3 if(data){ 4 var obj = {},arr=[],self = this,sum = this.getSum(data,'pvcnt'); 5 //index 用于判断是国内还是国家; 6 var index = data[0].hasOwnProperty('common_loc_prov') ? 'common_loc_prov' : 'common_loc_nat'; 7 $.each(data,function (k, v) { 8 obj.name = v[index]; 9 obj.value = v['pvcnt']; 10 obj.percent = Math.round(v['pvcnt'] / sum *10000)/100.00 + '%'; 11 arr.push(obj); 12 obj = {}; 13 }); 14 return this.getTop(arr,num); 15 } 16 }, 17 18 getTop:function (data,num) { 19 var arrs = [],parcent = userCounts = 0,sum = this.getSum(data,'userCounts'); 20 $.each(data,function (k, v) { 21 if(k < num){ 22 arrs.push(v) 23 parcent += v.percent; 24 value += v.value; 25 } 26 }) 27 arrs.push({ 28 'name':'其他', 29 'value':sum - value, 30 'percent':Math.round((sum - value)/ sum *10000)/100.00 + '%', 31 }) 32 return arrs; 33 }, 34 getSum:function (arr,index) { 35 var sum = 0; 36 $.each(arr,function (k, v) { 37 sum += v[index] 38 }) 39 return sum; 40 }, 41 }))();
4.获取对象的最后一个元素,并替换相应的key值:
1 data = this._convertD(data); 2 _convertD: function (data) { 3 data = this._getMax(data); 4 for(var k in data){ 5 var objs = {}; 6 var pvObj = this._get1KeyVal(data,'浏览量PV','pvcnt'); 7 var ipObj = this._get1KeyVal(data,'独立IP','ipcnt'); 8 objs['浏览量PV'+'_'+pvObj['浏览量PV']] = pvObj.value; 9 objs['独立IP'+'_'+ipObj['独立IP']] = ipObj.value; 10 } 11 return objs; 12 }, 13 _getMax:function (data) { 14 var arrs = [],obj = {}; 15 for(var k in data){ 16 obj[k] = data[k]; 17 arrs.push(obj); 18 obj = {}; 19 } 20 return arrs[1]; 21 }, 22 _get1KeyVal:function (data,index,value) { 23 var result = [], obj = {}, objs = {}; 24 for (var k in data) { 25 for (var i = 0; i < data[k].length; i++) { 26 var cur = data[k][i]; 27 for (var key in cur) { 28 obj['value'] = cur[value]; 29 obj['hour'] = cur['common_hour'] 30 } 31 result.push(obj); 32 obj = {}; 33 } 34 objs[index] = k; 35 objs['value'] = result; 36 return objs; 37 } 38 }
5.当一个组件需要调用后端多个接口获取数据并拼接时,可以让后台只返回一个接口,并将数据组合:
- current/bindwidthDetail/useFlow/bindwidthMax/fluency等来自不同的接口;
View Code{ "code": 0, "message": null, "result": { "bandwidthDetail": [], "useFlow": [ { "dayflow": 3012481021735, "day": "2016-11-07" } ], "fluency": [], "current": [ { "flow": { "unit": "M", "flow": 952543 }, "bandwidth": { "unit": "M", "time": "201611141255", "bandwidth": 863 } } ], "bandwidthMax": [ { "day": "20161107", "bandwidth": 1069 } ] }, "count": null }
6.数据处理最佳实践:
- 页面调整时,当前端接口与后端接口数据格式不一致时,可以写个转换类进行转换;
- 创建一个resultPaser类专门用于数据处理;
- 建议调整计费设置现有的数据展示及操作,自己维护实际的计费设置数据,而不是依赖easyui的table组件获取数据,方便以后界面展现扩展,当界面展示数据需要改变成其它格式时,不需要修改原始计费设置数据的格式,只要将原始数据格式化即可。
7.js页面跳转事件:window.onbeforeunload:
1 var isUploadFinish = true; 2 var uploadCount = 0; 3 var isUploadStart = false; 4 window.onbeforeunload = function (e) { 5 if (!isUploadFinish && uploadCount != 0) { 6 // 设置导航栏默认状态 7 setSubNav('video', 0); 8 return "您的上传还未完成,是否离开当前页?"; 9 } 10 if (!isUploadStart && uploadCount != 0) { 11 // 设置导航栏默认状态 12 setSubNav('video', 0); 13 return "您的视频没有上传,是否离开当前页?"; 14 } 15 };
8.将具有length属性的类数组对象转化为数组:
var args = Array.prototype.slice.call(arguments, 1);

浙公网安备 33010602011771号