我有一个包含日期和值的对象列表。我想创建一个新对象来对对象中的值求和。到目前为止我有一个解决方案,但不满足我的代码,想知道您是否有更好的解决方案?
此外,我想按顺序显示最近一年。
const dividendsYears = {
1976: [
0: {date: "1976-05-10", value: "0.00062"}
1: {date: "1976-07-16", value: "0.00062"}
2: {date: "1976-10-21", value: "0.00062"}
],
1977: [
0: {date: "1977-02-14", value: "0.00062"}
1: {date: "1977-05-12", value: "0.00123"}
2: {date: "1977-07-19", value: "0.00123"}
3: {date: "1977-10-18", value: "0.00123"}
],
1978: [
0: {date: "1978-02-14", value: "0.00123"}
1: {date: "1978-05-16", value: "0.00222"}
2: {date: "1978-07-19", value: "0.00222"}
3: {date: "1978-10-26", value: "0.00222"}
]
}
// Create new object that sum the total of value
let totalDividendsPerYear = {}
Object.entries(dividendsYears).forEach((entry, index) => {
let sum = 0
// Adds up dividends value per year
entry[1].forEach((item) => (
sum += Number(item.value)
))
totalDividendsPerYear[entry[0]] = sum
});
// Reverse array to sort the recent date to the oldest date
const sortRecentDate = Object.assign([], totalDividendsPerYear).reverse();
预期结果:
{
1978: 0.00789,
1977: 0.0043100000000000005,
1976: 0.00186
}
最佳答案
您可以使用单个 Object.keys 来完成此操作和Array.reduce :
const data = { 1976: [ {date: "1976-05-10", value: "0.00062"}, {date: "1976-07-16", value: "0.00062"}, {date: "1976-10-21", value: "0.00062"} ], 1977: [ {date: "1977-02-14", value: "0.00062"}, {date: "1977-05-12", value: "0.00123"}, {date: "1977-07-19", value: "0.00123"}, {date: "1977-10-18", value: "0.00123"} ], 1978: [ {date: "1978-02-14", value: "0.00123"}, {date: "1978-05-16", value: "0.00222"}, {date: "1978-07-19", value: "0.00222"}, {date: "1978-10-26", value: "0.00222"} ] }
let result = Object.keys(data).reduce((r,k) => {
r[k] = data[k].reduce((acc,c) => (+acc.value || acc || 0) + (+c.value))
return r
}, {})
console.log(result)
您也可以将其写成一行,但牺牲了可读性:
const data = { 1976: [ {date: "1976-05-10", value: "0.00062"}, {date: "1976-07-16", value: "0.00062"}, {date: "1976-10-21", value: "0.00062"} ], 1977: [ {date: "1977-02-14", value: "0.00062"}, {date: "1977-05-12", value: "0.00123"}, {date: "1977-07-19", value: "0.00123"}, {date: "1977-10-18", value: "0.00123"} ], 1978: [ {date: "1978-02-14", value: "0.00123"}, {date: "1978-05-16", value: "0.00222"}, {date: "1978-07-19", value: "0.00222"}, {date: "1978-10-26", value: "0.00222"} ] }
let result = Object.keys(data).reduce((r,k) =>
(r[k] = data[k].reduce((a,c) => (+a.value || a || 0) + (+c.value))) && r, {})
console.log(result)
关于javascript - 如何遍历具有数组的对象并对值求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56202770/