工作中数据处理相关知识点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 }
View Code
5.当一个组件需要调用后端多个接口获取数据并拼接时,可以让后台只返回一个接口,并将数据组合:
  • current/bindwidthDetail/useFlow/bindwidthMax/fluency等来自不同的接口;
    {
      "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
    }
    View Code
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 };
View Code

8.将具有length属性的类数组对象转化为数组:

var args = Array.prototype.slice.call(arguments, 1);

 

posted @ 2016-11-29 10:03  记录点滴生活  阅读(305)  评论(0)    收藏  举报