我需要了解執行此操作的最簡單方法。我有一個物件陣列:
const data = [
{
group: 'A',
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15
}
},
{
group: 'B',
incomes: {
"2019-12": 25,
"2020-12": 50,
}
}
]
我想要得到的是一個簡單的物件,它的鍵是 data.incomes 中的月份,值是相對月份值的總和,所以最終結果如下所示:
const totalIncomes = {
"2019-12": 125,
"2020-12": 250,
"2021-12": 15
}
有人可以一步一步地向我解釋嗎?
uj5u.com熱心網友回復:
使用 reduce 和 forEach 解決
const data = [
{
group: 'A',
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15
}
},
{
group: 'B',
incomes: {
"2019-12": 25,
"2020-12": 50,
}
}
]
const totalIncomes = data.reduce((acc,curr)=> {
Object.keys(curr.incomes).forEach((key, index) => {
if(!acc[key]){
acc[key] = 0;
}
acc[key] =curr.incomes[key]
});
return acc;
},{})
console.log(totalIncomes)
uj5u.com熱心網友回復:
也許這不是漂亮的解決方案,但您可以這樣做,該功能當然不是必需的。
const data = [
{
group: "A",
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15,
},
},
{
group: "B",
incomes: {
"2019-12": 25,
"2020-12": 50,
},
},
];
getterInformation(data);
function getterInformation(object) {
let objectWithCalculatedValues = {};
object.forEach((items) => {
for (const key in items.incomes) {
if (objectWithCalculatedValues[key] === undefined) {
objectWithCalculatedValues[key] = 0;
}
objectWithCalculatedValues[key] = items.incomes[key];
}
});
console.log(objectWithCalculatedValues);
}
uj5u.com熱心網友回復:
假設此資訊可能對可能無法獲得必要指導的讀者有用(由于各種可能的原因),以下是實作目標的一種可能方法(解決方案):
const aggregateIncomesByMonth = () => (
data.map(d => Object.entries(d.incomes).map(([k, v]) => ({
key: k,
value: v
}))).flat().reduce((fin, itm) => ({
...fin,
[itm.key]: (fin[itm.key] || 0) itm.value
}), {})
);
解釋
incomes僅從data陣列中提取- 對于每個
income物件,獲取鍵值對并轉換為結構的另一個物件{key: 20yy-mm, value: nn} - 用于
.flat()將步驟 2 的結果轉換為一維陣列 - 用于對(ie, 20yy-mm) 匹配的情況
.reduce求和。valuekey
代碼片段
const data = [{
group: 'A',
incomes: {
"2019-12": 100,
"2020-12": 200,
"2021-12": 15
}
},
{
group: 'B',
incomes: {
"2019-12": 25,
"2020-12": 50,
}
}
];
const aggregateIncomesByMonth = () => (
data.map(d => Object.entries(d.incomes).map(([k, v]) => ({
key: k,
value: v
}))).flat().reduce((fin, itm) => ({
...fin,
[itm.key]: (fin[itm.key] || 0) itm.value
}), {})
);
console.log(aggregateIncomesByMonth());
uj5u.com熱心網友回復:
我的方法是解構陣列。這樣,我在變數中就有了 A 組收入的所有資料,A對于B.
然后我做一個雙回圈來比較兩個物件的資料,看看日期是否匹配。如果是這樣,將收入相加并將資料添加到total物件中。
const data = [
{
group: 'A',
incomes: { "2019-12": 100, "2020-12": 200, "2021-12": 15 }
},
{
group: 'B',
incomes: { "2019-12": 25, "2020-12": 50 }
}
]
let A, B, total = {};
[A, B] = [data[0].incomes, data[1].incomes]
for(const date in A){
for(const d in B){
total[date] = date === d ? A[date] B[date] : A[date]
}
}
console.log(total)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417440.html
標籤:
下一篇:在JavaScript中使用Object.assign()從具有重復鍵的物件陣列中創建具有不同結構的多個物件陣列
