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

 function sum(arr){
//arr是传入的值数组,格式如["张三","李四","王五"] 或 [10,23,45] 等
var totalSum = 0;
if(arr.length !=0){
//判断类型,string类型,number类型,date类型
//传入数组数据是number类型值,计算总和---总和 = 每一个值相加
if(typeof parseInt(parseInt(arr[0]))=="number"){
//判断是否是日期类型
var a = /^(\d{4})-(\d{2})-(\d{2})$/;
if(a.test(arr[0])){
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + 1;
}
}else{
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + parseInt(arr[i]);
}
}
}else if(typeof parseInt(arr[0])=="string"){
//判断是否是string类型值,计算总和 ---总和 = 每一个值的个数相加
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + 1;
}
}else{
//do nthing
}
}else{
return 0;
}
//返回计算结果totalSum
return totalSum;
};

备注:

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

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

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

备注:

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

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

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

备注:

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

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

 /*
* 获取数组键的方法
* */
function getKeyValues(fields) {
//fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
var result = new Array();
var data = fields;
//取传入数组的第一个对象
if(0 != data.length){
data = data[0];
for(var tmp in data){
//tmp 为键名
//data[tmp] 为键值
result.push(data[tmp]);
}
}else{
//do nothing
}
return result;
};

备注:

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

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

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

备注:

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

六、函数封装

 <!--service.js-->
angular.module('iManager.services', [])
.factory('commonFunctions',function () {
return {
/*
* 根据键值数组求键值的总和
**/
sum : function(arr){
//arr是传入的值数组,格式如["张三","李四","王五"] 或 [10,23,45] 等
var totalSum = 0;
if(arr.length !=0){
//判断类型,string类型,number类型,date类型
//传入数组数据是number类型值,计算总和---总和 = 每一个值相加
if(typeof parseInt(parseInt(arr[0]))=="number"){
//判断是否是日期类型
var a = /^(\d{4})-(\d{2})-(\d{2})$/;
if(a.test(arr[0])){
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + 1;
}
}else{
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + parseInt(arr[i]);
}
}
}else if(typeof parseInt(arr[0])=="string"){
//判断是否是string类型值,计算总和 ---总和 = 每一个值的个数相加
for(var i = 0;i<arr.length;i++){
totalSum = totalSum + 1;
}
}else{
//do nthing
}
}else{
return 0;
}
//返回计算结果totalSum
return totalSum;
}, /*
* 根据传入的数据和传入的键名获取对象中某个键的值
**/
getValuesByField : function(fields,keyname){
//fields指的是传入的对象,即:{name:"张三",age:"4"}格式
//keyname指的是数组中的name或者age
var value = "";
var data = fields;
for( var i = 0;i < data.length; i++){
for(var tmp in data[i]){
//判断当前的key和传入的keyname是否相等
if( tmp == keyname){
value = data[i][tmp];
}else{
//do nothing
}
}
}
//返回keyname这个键对应的键值value
return value;
}, /*
* 获取数组键的方法
* */
getKeys : function(fields) {
//fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
var data1 = new Array();
var data = fields;
//取传入数组的第一个对象
if(0 != data.length){
data = data[0];
for(var tmp in data){
// console.log(tmp);//“键名”
// console.log(data[tmp]);//“键值'
data1.push(tmp);
}
}else{
//do nothing
}
return data1;
}, /*
* 获取数组键值的方法
* */
getKeyValues : function(fields) {
//fields是传入的数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
var result = new Array();
var data = fields;
//取传入数组的第一个对象
if(0 != data.length){
data = data[0];
for(var tmp in data){
//tmp 为键名
//data[tmp] 为键值
result.push(data[tmp]);
}
}else{
//do nothing
}
return result;
}, /*
* 根据键值数组找对应的键名数组---中文键值数组找到对应的英文键名数组
* */
getFieldsByValue : function(totaldatas,fieldDatas) {
//totaldatas数组代表着对应关系数组,即:[{name:"张三",age:"4"},{name:"李四",age:"5"},{name:"王五",age:"8"}]格式数组
//fieldDatas数组代表中文表头数据数组,即:["姓名","年龄"]格式数组,该数组是通过页面填写和相应的js方法获取到的
//上面两个数组是通过数组[{name:"姓名"},{age:"年龄"}]建立的对应关系。
var resultdata = []; //遍历中文键值数组,取出表头
for ( var i = 0;i < fieldDatas.length; i++){
var newField = fieldDatas[i];
//遍历对应关系数组
for ( var j = 0;j < totaldatas.length; j++){
for(var tmp in totaldatas[j]){
//判断对应关系数组中的键值 和 表头数据的当前值 是否相等
if(totaldatas[j][tmp] == newField){
resultdata.push(tmp);
}else{
// do nothing
}
}
}
}
return resultdata;
};
}
}

**注意:**

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

七、使用说明

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

备注:

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

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

备注:

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

imanager一些常用方法汇总的更多相关文章

  1. oracle教程:PLSQL常用方法汇总

    oracle教程:PLSQL常用方法汇总 在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set ...

  2. 解压命令unzip常用方法汇总

    解压命令unzip常用方法汇总: 1.把文件解压到当前目录下 1 unzip pythontab.com.zip 2.如果要把文件解压到指定的目录下,需要用到-d参数. 1 unzip -d ./tm ...

  3. [C#.Net]启动外部程序的几种常用方法汇总

    本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出. 2. 启动外部程序,等待其退出. 3. 启动外部程序,无限等待其退出. 4. 启 ...

  4. 使用markdown编辑evernote(印象笔记)的常用方法汇总

    原文发表在我的博客主页,转载请注明出处 前言 正所谓工欲善其事,必先利其器,本文将要介绍的evernote和markdown都是程序员必备的工具 虽然国内现在有了很多evernote的替代品,做的比较 ...

  5. Math对象常用方法汇总

    前几天翻阅<JavaScript权威指南>,看到了Math对象,于是汇总了一下. Math对象不同于其他的对象,它可以说是一个公共数学类,里面有很多数学方法,用于各种数学运算,但是Math ...

  6. StringUtils工具类常用方法汇总2(截取、去除空白、包含、查询索引)

      在上一篇中总结了StringUtils工具类在判断字符串为空,大小写转换,移除字符或字符序列,替换,反转,切割合并等方面的方法,这次再汇总一下其它常用的方法. 一.截取   StringUtils ...

  7. AngularJS - 常用方法汇总

    1. 数组元素的常用方法: http://www.cnblogs.com/diaosizhang/p/3729078.html 2. js的强大的splice方法  http://www.jb51.n ...

  8. 数据类型int、float、str、list、dict、set定义及常用方法汇总

    数据类型int:记录整数事物状态 可变不可变:值不可变类型,改变变量值实则是改变了变量的指向 int():功能:1.工厂函数, i = 5 <==> i = int(5) 2.强制类型转换 ...

  9. Hibernate hql getHibernateTemplate()常用方法汇总

    转自:https://www.iteye.com/blog/zwdsmileface-2191943 getHibernateTemplate()常用方法 一.find(String queryStr ...

随机推荐

  1. 带你走进二进制-一次APT攻击分析

    原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋   引言;   这是一次来自遥远国 ...

  2. MySQL 5.6不删空用户的影响

    目录 MySQL 5.6不删空用户的影响 问题 分析 测试 启动mysqld时没有加上--skip-name-resolve 启动mysqld时加上--skip-name-resolve 结论 MyS ...

  3. flask框架--cookie,session

    今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...

  4. 解决白屏(vue) - webpace es6转es5

    1.npm安装 npm install babel-polyfillnpm install es6-promise package.json中会出现 "babel-polyfill" ...

  5. Spark中的常用算子

    更多有用的例子和算子讲解参见: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html map是对每个元素操作, ma ...

  6. (转)每天一个linux命令(21):find命令之xargs

    原文:http://www.cnblogs.com/peida/archive/2012/11/15/2770888.html https://blog.csdn.net/ly1358152944/a ...

  7. c++中堆、栈、自由存储区和常量存储区(转)

    代码段 --text(code segment/text segment)text段在内存中被映射为只读,但.data和.bss是可写的.text段是程序代码段,在AT91库中是表示程序段的大小,它是 ...

  8. 在Ubuntu Server上安装Postgresql

    首先更新一下源: sudo apt-get update 如果你不知道Postgresql具体的包的名称,可以使用一下语句进行查找: apt-cache search ^Postgresql 使用上述 ...

  9. C# 泛型类在使用中约束

    首先看一下泛型的基本语法 访问修饰符 返回类型 泛型方法名 <T>(T 参数)   1):无法在泛型方法内部给任何 T 类型创建实例的对象,因为在泛型方法内部不知道传进来的对象有哪些构造函 ...

  10. Anaconda 科学计算环境与包的管理

    相信大多数 python 的初学者们都曾为开发环境问题折腾了很久,包管理和 python 不同版本的问题,特别是 window 环境安装个 scrapy 各种报错 ,使用 Anaconda 可以很好的 ...