imanager一些常用方法汇总

一、求和函数(根据键值数组求键值的总和)

 1 function sum(arr){
 2         //arr是传入的值数组,格式如["张三","李四","王五"] 或 [10,23,45] 等
 3         var totalSum = 0;
 4         if(arr.length !=0){
 5             //判断类型,string类型,number类型,date类型
 6             //传入数组数据是number类型值,计算总和---总和 = 每一个值相加
 7             if(typeof parseInt(parseInt(arr[0]))=="number"){
 8                 //判断是否是日期类型
 9                 var a = /^(\d{4})-(\d{2})-(\d{2})$/;
10                 if(a.test(arr[0])){
11                     for(var i = 0;i<arr.length;i++){
12                         totalSum = totalSum + 1;
13                     }
14                 }else{
15                     for(var i = 0;i<arr.length;i++){
16                         totalSum = totalSum + parseInt(arr[i]);
17                     }
18                 }
19             }else if(typeof parseInt(arr[0])=="string"){
20                 //判断是否是string类型值,计算总和 ---总和 = 每一个值的个数相加
21                 for(var i = 0;i<arr.length;i++){
22                     totalSum = totalSum + 1;
23                 }
24             }else{
25                 //do nthing
26             }
27         }else{
28             return 0;
29         }
30         //返回计算结果totalSum
31         return totalSum;
32     };

备注:

  该函数主要用于计算一个数组键值的和,根据数组数据的类型选择计算方式,对于没有考虑到的数据类型,可以在else{//do nothing}里面设置该类型数组的求和处理方法。

二、根据传入的数据和传入的键名获取对象中某个键的值

 1 function getValuesByField (fields,keyname){
 2     //fields指的是传入的对象,即:{name:"张三",age:"4"}格式
 3     //keyname指的是数组中的name或者age
 4     var value = "";
 5     var data = fields;
 6     for( var i = 0;i < data.length; i++){
 7         for(var tmp in data[i]){
 8             //判断当前的key和传入的keyname是否相等
 9             if( tmp == keyname){
10                 value = data[i][tmp];
11             }else{
12                 //do nothing
13             }
14         }
15     }
16     //返回keyname这个键对应的键值value
17     return value;
18 };

备注:

本函数实现的是 fields.name="张三"功能,通常情况下都是在已知键名的情况下,取键值。但是在向管理驾驶舱这种不已知键名的情况,需要先获取出键名,但是键名可能是中文,在js里面直接使用fields."用户名"这样的方法去取键值,是不被编译器允许的,所以就可以通过上面的函数代替。

三、根据数组获取数组键的函数

 1 /*
 2  * 获取数组键的方法
 3  * */
 4  function getKeys(fields) {
 5     //fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
 6     var data1 = new Array();
 7     var data = fields; 
 8     //取传入数组的第一个对象
 9     if(0 != data.length){
10         data = data[0];
11         for(var tmp in data){
12             // console.log(tmp);//“键名”
13             // console.log(data[tmp]);//“键值'
14             data1.push(tmp);
15         } 
16     }else{
17         //do nothing
18     }
19     return data1;
20 };

备注:

在大多数情况下,都是已知数组键,根据键获取对应的键值,该方法适用于,数组键未知情况下,获取出数组中所有的键情况。

四、根据数组获取数组键值的函数

 1 /*
 2  * 获取数组键的方法
 3  * */
 4  function getKeyValues(fields) {
 5     //fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
 6     var result = new Array();
 7     var data = fields; 
 8     //取传入数组的第一个对象
 9     if(0 != data.length){
10         data = data[0];
11         for(var tmp in data){
12             //tmp 为键名
13             //data[tmp] 为键值
14             result.push(data[tmp]);
15         } 
16     }else{
17         //do nothing
18     }
19     return result;
20 };

备注:

在大多数情况下,都是已知数组键,根据键获取对应的键值,即:arr.name形式,该方法适用于,数组键未知情况下,获取出数组中所有的键值情况。

五、根据键值数组找对应的键名数组函数

 1 /*
 2  * 根据键值数组找对应的键名数组---中文键值数组找到对应的英文键名数组
 3  * */
 4 function getFieldsByValue(totaldatas,fieldDatas) {
 5     //totaldatas数组代表着对应关系数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
 6     //fieldDatas数组代表中文表头数据数组,即:["姓名","年龄"]格式数组,该数组是通过页面填写和相应的js方法获取到的
 7     //上面两个数组是通过数组[{name:"姓名"},{age:"年龄"}]建立的对应关系。
 8     var resultdata = [];
 9 
10     //遍历中文键值数组,取出表头
11     for ( var i = 0;i < fieldDatas.length; i++){
12         var newField = fieldDatas[i];
13         //遍历对应关系数组
14         for ( var j = 0;j < totaldatas.length; j++){
15             for(var tmp in totaldatas[j]){
16                 //判断对应关系数组中的键值 和 表头数据的当前值 是否相等
17                 if(totaldatas[j][tmp] == newField){
18                     resultdata.push(tmp);
19                 }else{
20                     // do nothing
21                 }
22             }
23         }
24     }
25     return resultdata;
26 };

备注:

该函数是在管理驾驶舱项目中处理图数据时候用到的,通过创建图页面绑定数据到js里面,js里面可以整理出["姓名","年龄"]这样一个数组,但是后台返回的数据数组是[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组,没有办法通过中文键名直接去这个数组中获取到对应的键值,所以就需要用到了上面这个函数,先通过上面的函数,将["姓名","年龄"]数组找到对应的[name,age],然后再去处理找到真正的数据。

六、函数封装

  1 <!--service.js-->
  2 angular.module('iManager.services', [])
  3 .factory('commonFunctions',function () {
  4     return {
  5             /*
  6              * 根据键值数组求键值的总和
  7             **/
  8             sum : function(arr){
  9             //arr是传入的值数组,格式如["张三","李四","王五"] 或 [10,23,45] 等
 10             var totalSum = 0;
 11             if(arr.length !=0){
 12                 //判断类型,string类型,number类型,date类型
 13                 //传入数组数据是number类型值,计算总和---总和 = 每一个值相加
 14                 if(typeof parseInt(parseInt(arr[0]))=="number"){
 15                     //判断是否是日期类型
 16                     var a = /^(\d{4})-(\d{2})-(\d{2})$/;
 17                     if(a.test(arr[0])){
 18                         for(var i = 0;i<arr.length;i++){
 19                             totalSum = totalSum + 1;
 20                         }
 21                     }else{
 22                         for(var i = 0;i<arr.length;i++){
 23                             totalSum = totalSum + parseInt(arr[i]);
 24                         }
 25                     }
 26                 }else if(typeof parseInt(arr[0])=="string"){
 27                     //判断是否是string类型值,计算总和 ---总和 = 每一个值的个数相加
 28                     for(var i = 0;i<arr.length;i++){
 29                         totalSum = totalSum + 1;
 30                     }
 31                 }else{
 32                     //do nthing
 33                 }
 34             }else{
 35                 return 0;
 36             }
 37             //返回计算结果totalSum
 38             return totalSum;
 39         },
 40         
 41         /*
 42         * 根据传入的数据和传入的键名获取对象中某个键的值
 43         **/
 44         getValuesByField : function(fields,keyname){
 45             //fields指的是传入的对象,即:{name:"张三",age:"4"}格式
 46             //keyname指的是数组中的name或者age
 47             var value = "";
 48             var data = fields;
 49             for( var i = 0;i < data.length; i++){
 50                 for(var tmp in data[i]){
 51                     //判断当前的key和传入的keyname是否相等
 52                     if( tmp == keyname){
 53                         value = data[i][tmp];
 54                     }else{
 55                         //do nothing
 56                     }
 57                 }
 58             }
 59             //返回keyname这个键对应的键值value
 60             return value;
 61         },
 62         
 63          /*
 64          * 获取数组键的方法
 65          * */
 66          getKeys : function(fields) {
 67             //fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
 68             var data1 = new Array();
 69             var data = fields; 
 70             //取传入数组的第一个对象
 71             if(0 != data.length){
 72                 data = data[0];
 73                 for(var tmp in data){
 74                     // console.log(tmp);//“键名”
 75                     // console.log(data[tmp]);//“键值'
 76                     data1.push(tmp);
 77                 } 
 78             }else{
 79                 //do nothing
 80             }
 81             return data1;
 82         },
 83         
 84          /*
 85          * 获取数组键值的方法
 86          * */
 87          getKeyValues : function(fields) {
 88             //fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
 89             var result = new Array();
 90             var data = fields; 
 91             //取传入数组的第一个对象
 92             if(0 != data.length){
 93                 data = data[0];
 94                 for(var tmp in data){
 95                     //tmp 为键名
 96                     //data[tmp] 为键值
 97                     result.push(data[tmp]);
 98                 } 
 99             }else{
100                 //do nothing
101             }
102             return result;
103         },
104         
105         /*
106          * 根据键值数组找对应的键名数组---中文键值数组找到对应的英文键名数组
107          * */
108         getFieldsByValue : function(totaldatas,fieldDatas) {
109             //totaldatas数组代表着对应关系数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
110             //fieldDatas数组代表中文表头数据数组,即:["姓名","年龄"]格式数组,该数组是通过页面填写和相应的js方法获取到的
111             //上面两个数组是通过数组[{name:"姓名"},{age:"年龄"}]建立的对应关系。
112             var resultdata = [];
113         
114             //遍历中文键值数组,取出表头
115             for ( var i = 0;i < fieldDatas.length; i++){
116                 var newField = fieldDatas[i];
117                 //遍历对应关系数组
118                 for ( var j = 0;j < totaldatas.length; j++){
119                     for(var tmp in totaldatas[j]){
120                         //判断对应关系数组中的键值 和 表头数据的当前值 是否相等
121                         if(totaldatas[j][tmp] == newField){
122                             resultdata.push(tmp);
123                         }else{
124                             // do nothing
125                         }
126                     }
127                 }
128             }
129             return resultdata;
130         };
131     }
132 }

**注意:**

如果封装过程中一个被封装的函数调用了另外一个函数,需要在return上面将这个函数重写。

七、使用说明

  1. 依赖注入
1 /** app.js文件 **/
2 var iManager=angular.module("iManager",['iManager.controllers','iManager.services'])
3 备注:模块声明,模块名:iManager,在[]里面依赖注入iManager.controllers模块和iManager.services模块
4 
5 /*main.js文件*/
6 angular.module('iManager.controllers', [])
7     .controller('WorksheetCtrl',function($scope,commonFunctions){
8         //do nothing
9     })

备注:

在要是用上面方法的controller里面依赖注入commonFunctions,如上。

  1. 函数调用
1 /*main.js文件*/
2 angular.module('iManager.controllers', [])
3     .controller('WorksheetCtrl',function($scope,commonFunctions){
4         commonFunctions.sum(data);
5     })

备注:

在要是用上面方法的controller里面依赖注入commonFunctions后,直接通过 commonFunctions.函数名 使用,如上。

posted @ 2018-09-26 09:44  小小飞郭  阅读(436)  评论(0编辑  收藏  举报