JS去重函数的扩展应用
数据:
账单id[1,1,1,1,2,2,2,3,3,3,3,3,3,3],
相对于账单id的金额[100,120,110,150,200,180,220,115,150,120,180,220,140,200],
要求:
去重账单id数组,按id分组账单金额总额数组,按账单分组账单金额明细(二维数组)。
JS方法实现:(该方法的前提是id与金额一一对应,且id已经排序)
/**
* 重构公司id和金额数组
* @param arrId:companyId数组
* @param arrAmount:金额数组
* @returns ids:去重后的id数组
* @returns amount:按id分组求和的金额数组
* @returns groupAmount:按id分组的二位金额数组
*/
function uniqueArray(arrId,arrAmount){
var ids = new Array(); //存放id新数组
var amount = new Array();//存放金额新数组
var groupAmount = new Array();//分组金额数组
var res =[ids,amount,groupAmount];//结果数组
var json = {};
var index =0;
for(var i = 0; i < arrId.length; i++){
if(!json[arrId[i]]){//不重复操作
ids.push(arrId[i]);
amount.push(arrAmount[i]);
json[arrId[i]] = 1;
groupAmount[index]=new Array();//声明二维数组
groupAmount[index].push(arrAmount[i]);
index++;
}else{ //重复时操作
amount[index-1] = parseFloat(amount[index-1])+ parseFloat(arrAmount[i]);
groupAmount[index-1].push(arrAmount[i]);
}
}
return res;
}
无序id的实现后续。。。
无序id数组的实现,示例代码如下:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<script type="text/javascript">
var arrId =[1,1,2,1,3,1,2,3,3,3,2,3,3,3];
var arrAmount = [100,120,110,150,200,180,220,115,150,120,180,220,140,200];
var tmpRes = uniqueArray(arrId,arrAmount);
alert(tmpRes[0]+'----'+tmpRes[1]+'----'+tmpRes[2][0]+'||'+tmpRes[2][1]+'||'+tmpRes[2][2]);
function uniqueArray(arrId,arrAmount){
var ids = new Array(); //存放id新数组
var amount = new Array();//存放金额新数组
var groupAmount = new Array();//分组金额数组
var res =[ids,amount,groupAmount];//结果数组
var json = {};
var index =0;
for(var i = 0; i < arrId.length; i++){
if(!json[arrId[i]]){//不重复操作
ids.push(arrId[i]);
amount.push(arrAmount[i]);
json[arrId[i]] = 1;
groupAmount[index]=new Array();//声明二维数组
groupAmount[index].push(arrAmount[i]);
index++;
}else{ //重复时操作
//求arrId[i]的值位于ids的位置--这样才保证无序也可以实现
var ins = getIndexofOb(ids,arrId[i]);
// amount[index-1] = parseFloat(amount[index-1])+ parseFloat(arrAmount[i]);
// groupAmount[index-1].push(arrAmount[i]);
amount[ins] = parseFloat(amount[ins])+ parseFloat(arrAmount[i]);
groupAmount[ins].push(arrAmount[i]);
}
}
return res;
} /**
* 返回ob在arrOb中索引值,若不存在,返回-1
* @param arrOb
* @param ob
* @returns {number}
*/
function getIndexofOb(arrOb,ob){
for(var i= 0;i<arrOb.length;i++){
if(ob==arrOb[i]){
return i;
}
}
return -1;
}
</script>
<body> </body>
</html>
JS去重函数的扩展应用的更多相关文章
- JS的函数
函数由四部分组成 function+function name+parameter+body 方法调用模式 Object.add(); 函数调用模式: add(3,4) 构造器调用模式:JS是基于原型 ...
- JS匿名函数的理解
js匿名函数的代码如下:(function(){ // 这里忽略jQuery 所有实现 })(); 半年前初次接触jQuery 的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的 ...
- ES6入门之函数的扩展
函数js原有的: 属性:arguments[].caller(调用该函数的引用,注意与callee分别开,callee指的是调用函数本身经常在递归中出现).length(形参个数).prototype ...
- IE7、IE8不兼容js trim函数的解决方法
IE兼容,有时候让人头疼,但又不得不去解决. 先看看一下代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xh ...
- 转载 jQuery和js自定义函数和文件的方法(全网最全)
jQuery和js自定义函数和文件的方法(全网最全) 版权声明:本文为像雾像雨又像风_http://blog.csdn.net/topdandan的原创文章,未经允许不得转载. https:// ...
- 【node.js】函数、路由
Node.js中函数的使用与Javascript类似,一个函数可以作为另一个函数的参数.我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数. function say(word) { ...
- ES6 - Note3:数组、对象与函数的扩展
一.数组的扩展,ES6在数组扩展了一些API,以实现更多的功能 1.Array.from:可以将类数组和可遍历的数据结构转换成真正的数组,如下所示 var a = { '0':1,'1':1,leng ...
- JS回调函数全解析教程
转自:http://blog.csdn.net/lulei9876/article/details/8494337 自学jQuery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速g ...
- 学习js回调函数
<!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...
随机推荐
- 【MySQL参数优化】根据架构优化
根据MySQL的架构优化 参数调整的最终效果: 1)SQL执行速度足够快 2)业务吞吐量足够高:TPS,QPS 3)系统负载可控,合理:cpu,io负载 在调整参数的时候,应该熟悉mysql的体系架构 ...
- vscode template中设置不换行
{ "workbench.colorTheme": "Dark-Dracula", "workbench.iconTheme": " ...
- Go-简介-发展
01-Go语言介绍 目录 Go语言介绍 Go语言特性 Go语言发展(版本/特性) Go语言应用 谁在用 应用领域 Go语言项目 Go语架构 Go语言发展前景 Go语言介绍 Go 即Golang,是Go ...
- 游程编码run length code
今天突然看到一个名词,游程编码.也叫行程编码. 简单理解就是,几个相同连续的字符,然后用数字统计表示. 举个例子: aaaabbbccc 用游程编码的表示就是4a3b3c 如果:连续字符只有一个 那么 ...
- Huffman编码实验
一. 实验目的 熟练掌握哈夫曼树的建立和哈夫曼编码的算法实现. 二. 实验内容 根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求赫夫曼编码,并能把给定的编码进行译码. 三. 实验要求 ...
- shell并行处理
for i in (file1 file2 file3), do process_a $i | tee process_a $i_a.txt | process_b > $i_b.txt &am ...
- systemd[1]: mariadb.service: Can't open PID file /data/mariadb/mysql/30-mariadb-1.pid (yet?) after start: No such file or directory
环境:Centos8 编译安装Mariadb-10.4.11,安装到make install都没有问题,添加服务启动脚本到/lib/systemd/system/,服务启动脚本名为mariadb.se ...
- Qt QGraphicsScene||GraphicsView函数刷新多次内存溢出问题
需将QGraphicsScene *scene = new QGraphicsScene;放入上面声明头文件中声明: cpp文件中声明: 使用: 需要添加这个 scene->clear(); 这 ...
- [WC2010]重建计划(长链剖分+线段树+分数规划)
看到平均值一眼分数规划,二分答案mid,边权变为w[i]-mid,看是否有长度在[L,R]的正权路径.设f[i][j]表示以i为根向下j步最长路径,用长链剖分可以优化到O(1),查询答案线段树即可,复 ...
- PyTorch基础——使用神经网络识别文字中的情感信息
一.介绍 知识点 使用 Python 从网络上爬取信息的基本方法 处理语料"洗数据"的基本方法 词袋模型搭建方法 简单 RNN 的搭建方法 简单 LSTM 的搭建方法 二.从网络中 ...