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 /** 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 /*main.js文件*/ 2 angular.module('iManager.controllers', []) 3 .controller('WorksheetCtrl',function($scope,commonFunctions){ 4 commonFunctions.sum(data); 5 })
备注:
在要是用上面方法的controller里面依赖注入commonFunctions后,直接通过 commonFunctions.函数名 使用,如上。