扫码关注官方订阅号
左边为原始数据,右边为处理后的
这种问题一眼看上去就是用array的reduce方法的。
arr.reduce((acc, c) => { let existing = acc.find(x => x.time === c.time) if (existing) { existing.data.push({ p_name: c.p_name, t_name: c.t_name, money: c.money }) existing.total += c.money } else { acc.push({ time: c.time, data: [{ p_name: c.p_name, t_name: c.t_name, money: c.money}], total: c.money }) } return acc }, [])
不太清楚有什么高大上的做法,这里就说下我在刚开始看到这题时想到的方法,算是一个入门级程序员的思考吧
首先分析,发现是通过时间分类的 假设原有数据是存放在变量data里面的,先将数据按时间分类
var newData = {} data.forEach(function(v){ if(newData[v.time]){ newData[v.time].push(v) }else{ newData[v.time] = [v] } })
然后抽取公共方法,并进行求和
var finalData = [] for(var x in newData){ var obj = { "time": x, "data": [], "total": 0 } newData[x].forEach(function(v){ data.push({ "p_name": v.p_name, "t_name": v.t_name, "money": v.money }) obj.total += (+v.money) }) obj.total = obj.total.toFixed(2) finalData.push(obj) }
最后变量 finalData 就是我们处理好的数据,如果包装还函数里面return一下就好了
写法很简陋但是能用,如果有大神能写出更好的代码望不吝赐教
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这种问题一眼看上去就是用array的reduce方法的。
不太清楚有什么高大上的做法,这里就说下我在刚开始看到这题时想到的方法,算是一个入门级程序员的思考吧
首先分析,发现是通过时间分类的 假设原有数据是存放在变量data里面的,先将数据按时间分类
然后抽取公共方法,并进行求和
最后变量 finalData 就是我们处理好的数据,如果包装还函数里面return一下就好了
写法很简陋但是能用,如果有大神能写出更好的代码望不吝赐教