javascript树形汇总金额
在开发企业应用的时候总会遇到树形汇总金额的场景,即将树形的列表中的叶子节点(没有子节点)的金额汇总到父节点上。
这种需求一般是在前端进行处理,即使用JavaScript处理,因为叶子节点的金额可能是不断改变的,每回变动都请求后台显然不现实。
场景与实现
假设有一个主从表的场景。第一点,从表是一个树形的列表,只有叶子节点能填写金额,父节点都汇总其下叶子节点的金额。第二点,主表有一个金额字段,取值汇总自汇总从表中所有根节点(顶级父节点)的金额。
先编写一个遍历从表中所有根节点的方法。
function sumMoney2Main(items) {
let sumMoney = 0;
for (let item of items) {
this.sumMoneyToItsParent(item);
sumMoney += item.money || 0;
}
return sumMoney;
}
然后编写一个递归汇总子节点金额的方法。
function sumMoneyToItsParent(item) {
let sumMoney = 0;
if (item.children && item.children.length) {
for (let childItem of item.children) {
sumMoneyToItsParent(childItem);
sumMoney += childItem.money || 0;
}
item.money = sumMoney;
}
}
这样就完成了树形汇总金额的需求。
简单分析
这里主要有几个要点。
1.在JavaScript中,数组中的对象都是保存在堆内存中的,栈内存中的变量只是保存的对这些对象的引用,因此在上面的代码中,无论将数组中的对象的引用赋予给多少个变量并做改动,实际上都是对数组中对象的改动,这是最基础的。这一特性被称为浅拷贝。
2.递归的要点是在遍历子节点的时候,先去遍历子节点的子节点,直到没有子节点了,才开始一级一级累加金额。
"他们都在看烟花,无人想起你。"
javascript树形汇总金额的更多相关文章
- Web应用程序开发,基于Ajax技术的JavaScript树形控件
感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用, ...
- Javascript知识点汇总-初级篇
JavaScript的数据类型都有什么? 基本数据类型:String,Boolean,Number,Undefined, Null 引用数据类型:Object(Array,Date,RegExp,Fu ...
- 使用 JavaScript 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额
查看本章节 查看作业目录 需求说明: 根据消费金额和消费者是否为会员确定折扣,最终核算实际应该支付的金额 消费金额在 200 元以上的会员折扣是 7.5 折,消费金额没有达到 200 元的会员折扣是 ...
- JavaScript学习汇总
对于JavaScript,还是无法割舍,有心无力,时间总是匆匆,暂且都放在这里吧 javascript中this的使用 写的很不错的一偏文章,简单看了下,mark了吧 原文:http://davids ...
- javascript树形菜单简单实例
参考博客地址:http://chengyoyo2006.blog.163.com/blog/static/8451734820087843950604/ <!DOCTYPE HTML PUBLI ...
- javascript算法汇总(持续更新中)
1. 线性查找 <!doctype html> <html lang="en"> <head> <meta charset="U ...
- JavaScript将小写金额转换成大写
//num为小写金额,单位元 changeMoney(num) { if(isNaN(num))return ""; var strPrefix=""; if( ...
- JavaScript操作符汇总
操作符 JavaScript 有赋值.比较.算术.位.逻辑.字符串和特殊运算符.本章描述了操作符,以及关于操作符优先级的一些信息. 表 2.1 JavaScript 所有操作符简明列表. 表 2.1 ...
- JavaScript -- 知识点汇总
js语法 1. javascript数据类型 JavaScript拥有动态类型.这意味着相同的变量可用作不同的类型:有 字符串,数字, 布尔值, 对象, 数组,Undefined和Null 对象: v ...
随机推荐
- python3 之 判断字符串是否只为数字(isdigit()方法、isnumeric()方法)
Isdigit()方法 - 检测字符串是否只由数字组成 语法: str.isdigit() 参数: 无 返回值: 如果字符串只包含数字,则返回True,否则返回False. 实例: 以下实例展示了 ...
- Stream系列(三) FlatMap方法使用
将多维嵌套列表转换为单维列表 EmployeeTestCase.java package com.example.demo; import lombok.Data; import lombok.ToS ...
- SpringBoot:带你认认真真梳理一遍自动装配原理
前言 Spring翻译为中文是“春天”,的确,在某段时间内,它给Java开发人员带来过春天,但是随着我们项目规模的扩大,Spring需要配置的地方就越来越多,夸张点说,“配置两小时,Coding五分钟 ...
- Rust 入门 (五)
定义并介绍结构体 结构体和我们前面学习的元组类似,结构体中的每一项都可以是不同的数据类型.和元组不同的地方在于,我们需要给结构体的每一项命名.结构体较元组的优势是:我们声明和访问数据项的时候不必使用索 ...
- 少用float浮动?
在css中,float 属性定义元素在哪个方向浮动.也是我在css样式中常用到的属性,后来浏览了一些公司项目代码,发现float属性极少有人使用.随后做了一些调查和研究: 1.在ie6以下,float ...
- linux虚拟机中各服务端口及配置文件路径
查询端口状况命令: netstat -an| grep 端口号 查询服务状态(服务是否开启)命令:systemctl status 服务名 开启服务命令:systemctl start 服务名 ...
- hello gulp,使用gulp的第一天。
昨天花了一天的时间,学习了一下gulp,今天整理一下,也分享给朋友们. 首先当然是去gulp的官网逛一圈了: http://gulpjs.com/ 中文站地址: http://www.gulpjs.c ...
- 了解 MongoDB 看这一篇就够了【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- iOS 音频开发之CoreAudio
转自:http://www.cnblogs.com/javawebsoa/archive/2013/05/20/3089511.html 接 触过IOS音频开发的同学都知道,Core Audio 是I ...
- 数理统计(一)——用Python进行方差分析
数理统计(一)——Python进行方差分析 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 方差分析可以用来推断一个或多个因素在其状态变化时,其因素水平或交互 ...