javascript - 关于使用JS编一个函数处理数据流为规定格式的
巴扎黑
巴扎黑 2017-04-11 12:31:00
[JavaScript讨论组]

左边为原始数据,右边为处理后的

巴扎黑
巴扎黑

全部回复(2)
ringa_lee

这种问题一眼看上去就是用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
}, [])
PHPz

不太清楚有什么高大上的做法,这里就说下我在刚开始看到这题时想到的方法,算是一个入门级程序员的思考吧

首先分析,发现是通过时间分类的 假设原有数据是存放在变量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一下就好了

写法很简陋但是能用,如果有大神能写出更好的代码望不吝赐教

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号