javascript - 在javascript中对数组进行排序和操作
问题描述
我有以下数组:
var curr = [{ "Year": 2019, "Title": "Asset Management Sample", "Sum": 1020000.0, "Budget":0
}, {
"Year": 2019,
"Title": "Monday test 2",
"Sum": 2546658.0,
"Budget":100
}, {
"Year": 2020,
"Title": "Asset Management Sample",
"Sum": 1020000.0,
"Budget":1000
}, {
"Year": 2020,
"Title": "Monday test 2",
"Sum": 3472000.0,
"Budget":100
}, {
"Year": 2021,
"Title": "Asset Management Sample",
"Sum": 1020000.0,
"Budget":100
}, {
"Year": 2021,
"Title": "Monday test 2",
"Sum": 2452000.0,
"Budget":100
}]
我需要更改为:
[{
"Year": 2019,
"Asset Management Sample": 1020000.0,
"Monday test": 2546658.0
}, {
"Year": 2020,
"Asset Management Sample": 1020000.0,
"Monday test 2": 3472000.0
}, {
"Year": 2021,
"Asset Management Sample": 1020000.0,
"Monday test 2": 2452000.0
}]
在早期海报的帮助下,我使用了 .reduce (从下面稍微修改)来生成这个:
var res = arr.reduce(function(acc, curr) {
acc[curr.Year] = acc[curr.Year];
acc[curr.Year] = acc[curr.Year] || { Year: curr.Year } ;
acc[curr.Year][curr.Title] = curr.Sum;
return acc;
我需要将其扩展为包括每年所有预算值的总和(每年应该有一个预算值)。我在返回之前添加了以下行:
acc[curr.Year][curr.Budget] = curr[curr.Budget] || { Budget: curr.Budget } ;
它正在为每个预算值添加单独的条目。如何在不影响其他返回数组的情况下对预算值求和并返回它?
解决方案
reduce
像这样使用:
const arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
const res = Object.values(arr.reduce((acc, { Year, Title, Sum }) => (acc[Year] = acc[Year] || { Year }, acc[Year][Title] = Sum, acc), {}));
console.log(res);
更详细的版本:
const arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
const res = Object.values(arr.reduce((acc, { Year, Title, Sum }) => {
acc[Year] = acc[Year] || { Year };
acc[Year][Title] = Sum;
return acc;
}, {}));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
ES5 语法:
var arr = [{"Year":2019,"Title":"Asset Management Sample","Sum":1020000},{"Year":2019,"Title":"Monday test 2","Sum":2546658},{"Year":2020,"Title":"Asset Management Sample","Sum":1020000},{"Year":2020,"Title":"Monday test 2","Sum":3472000},{"Year":2021,"Title":"Asset Management Sample","Sum":1020000},{"Year":2021,"Title":"Monday test 2","Sum":2452000}];
var res = arr.reduce(function(acc, curr) {
acc[curr.Year] = acc[curr.Year] || { Year: curr.Year };
acc[curr.Year][curr.Title] = curr.Sum;
return acc;
}, {});
res = Object.keys(res).map(function(key) {
return res[key];
});
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
推荐阅读
- python - 无法解析功能:来自无效参数的 goog:chromeOptions:无法识别的 chrome 选项:首选项
- node.js - TypeError:GraphQLObjectType 不是构造函数
- mysql - 需要以 2020 年 1 月、2019 年 2 月、... 的格式显示数据,使用 SQL
- python - 拒绝 latin1_swedish_ci 以外的所有排序规则
- clearcase - 用户无法在我们的两台 ClearCase 服务器上工作
- shiny - 数据表中行回调中的边框样式
- python - sqlite3 表 Python 字符串格式化程序参数的变量值
- c - 如何使用 qsort() 根据它们与其他参考点的斜率对点进行排序?(没有 qsort_r()/qsort_s())
- python - 从文件中读取时如何在for循环中找到它的最后一项 - Python
- c - 使用 C 合并链表