javascript - _.sumBy 数组中相同键的总计
问题描述
我正在努力获取对象中数组中相同键的所有值的输出。输出只是一个总和(加法)。使用 lodash 我尝试过 sumBy。
// Here is my data:(question - how do I reformat the data below
// into one array as I think that would help)
const competitions = {
0: {gameScore: "2", reportDate: "2018-05-09", oldvalue: 2},
1: {gameScore: "3", reportDate: "2018-01-09", oldvalue: 1},
2: {gameScore: "4", reportDate: "2018-02-09", oldvalue: 1.5},
3: {gameScore: "5", reportDate: "2018-01-09", oldvalue: 1.5},
4: {gameScore: "6", reportDate: "2018-02-09", oldvalue: 1.5}
};
// This is what I have tried:
const formatted_data = _(competitions)
.groupBy('oldvalue')
.map((v) => ({
newValue: _.sumBy(v, 'oldvalue')
}))
.value();
console.log(formatted_data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
结果如下:
formatted_data = {
0: {newValue: 2},
1: {newValue: 1},
2: {newValue: 1.5},
3: {newValue: 1.5},
4: {newValue: 1.5}
}
它将 oldvalue 重新映射到 newVale,但希望将一个结果全部加在一起。
最终我需要formatted_data = 7.5
任何帮助都是极好的。
解决方案
_.values()
使用(或本机)转换为数组Object.values()
,然后使用_.sumBy()
.
注意: competitions
应该是一个数组,因为无论如何它们都有数字键。
const competitions = {
0: {gameScore: "2", reportDate: "2018-05-09", oldvalue: 2},
1: {gameScore: "3", reportDate: "2018-01-09", oldvalue: 1},
2: {gameScore: "4", reportDate: "2018-02-09", oldvalue: 1.5},
3: {gameScore: "5", reportDate: "2018-01-09", oldvalue: 1.5},
4: {gameScore: "6", reportDate: "2018-02-09", oldvalue: 1.5}
}
const result = _.sumBy(_.values(competitions), 'oldvalue');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
推荐阅读
- vue.js - 未知的自定义元素:
- reactjs - 在测试运行期间隐藏编译警告
- sharepoint - 如何过滤在 Sharepoint 2013 中创建的 24 小时后的项目
- angular - 通过输入调用模板名称
- sql-server - 可以将 csv 数据读入 SQL Server / SSMS,只有读取权限
- python - Python MySQL 不正确的字符串值
- javascript - 在词树可视化中使用大量字符串
- react-native - 有什么方法可以用 react native ScrollView onScroll 钩子制作动画吗?
- javascript - React Native 中的“使用 `--clearCache` 标志运行打包程序”是什么意思?
- ansible - ansible 从保险库中读取用户名和密码