[英]Javascript groupby sum giving wrong results
我有这个字典数据列表我想应用 groupby 然后做总和但我得到的end_date为2020-05-11 00:00:00+00
而不是2020-05-17 00:00:00+00
在最后的聚合中
请建议我哪里做错了。
输入数据 :-
data = [
{start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 10},
{start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 2}
]
预期结果 :-
start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", amount: 12}
当前结果:-
start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-11 00:00:00+00", amount: 12}
分组公式:-
var result = _(data)
.groupBy(x => x.start_date, y => y.end_date)
.map((value, key) => ({start_date: key, end_date : key, amount: _.sumBy(value, 'amount')}))
.value();
如果有任何其他 Javascript 解决方案,请提出建议。 谢谢
因为你链接data
,所以下groupBy
只需要采取一个参数(这是在变换键的iteratee DOC )
您可以制作start_date
和end_date
组合的组键
const data = [ { start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 10, }, { start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 2, }, ] const result = _(data) .groupBy((obj) => [obj.start_date, obj.end_date].join("to")) .map((value, key) => ({ start_date: key.split("to")[0], end_date: key.split("to")[1], amount: _.sumBy(value, "amount"), })) .value() console.log(result)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
使用 start 和 end 作为键的简单 reduce 循环
data = [{ start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 10 }, { start_date: "2020-05-11 00:00:00+00", end_date: "2020-05-17 00:00:00+00", id: "ola", amount: 2 } ] const groupIt = data => { const groupings = data.reduce((grps, item) => { const { start_date, end_date, amount } = item; const key = `${start_date}-${end_date}`; grps[key] = grps[key] || { start_date, end_date, amount: 0 }; grps[key].amount += amount; return grps; }, {}); return Object.values(groupings); } const result = groupIt(data); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.