javascript树形汇总金额
2019-12-14 06:28
120 查看
在开发企业应用的时候总会遇到树形汇总金额的场景,即将树形的列表中的叶子节点(没有子节点)的金额汇总到父节点上。
这种需求一般是在前端进行处理,即使用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.递归的要点是在遍历子节点的时候,先去遍历子节点的子节点,直到没有子节点了,才开始一级一级累加金额。
"他们都在看烟花,无人想起你。"
相关文章推荐
- 13款js树形菜单 Javascript tree 树型菜单提供下载
- javascript 树形数据转化维数组
- javascript中Dom对象实现金额文本框
- Javascript在Asp.Net中的应用汇总
- javascript跨域的方法汇总
- Javascript 树形菜单 (11个)
- JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
- Javascript扩展String.prototype实现格式金额、格式时间、字符串连接、计算长度、是否包含、日期计算等功能
- javascript算法汇总(持续更新中)
- 树形DP代码汇总
- JavaScript学习书籍汇总
- JavaScript知识汇总
- 一段时间的javascript学习回顾------小模块汇总
- javascript操作xml生成树形菜单
- javascript如何实现360度全景照片问题汇总
- 82个Javascript免豆资料下载地址汇总
- javascript将数字金额变成中文大写金额
- 11个Javascript树形菜单
- javascript刷新父页面方法汇总详解
- Acticle 12:javascript对象:js对象汇总