我有一個具有默認屬性的物件和兩個陣列,其中一個是空的。空陣列在某些情況下可能不為空,但我仍然想回圈它。如果陣列為空,reduce 將不會被呼叫,并且我會丟失一些屬性,所以想法是在物件中有一些默認屬性以防陣列為空。預期的結果是這樣的:
[{
"playedOffTickets": 60,
"playedOffRevenue": 1730.5,
"Transactions.deliveryMethod": "Print At Home Delivery",
"soldTickets": 0,
"soldRevenue": 0,
},
{
"playedOffTickets": 43,
"playedOffRevenue": 1160,
"Transactions.deliveryMethod": "Postal Delivery",
"soldTickets": 0,
"soldRevenue": 0,
},
{
"playedOffTickets": 12,
"playedOffRevenue": 348,
"Transactions.deliveryMethod": "Cobo Delivery",
"soldTickets": 0,
"soldRevenue": 0,
},
{
"playedOffTickets": -3,
"playedOffRevenue": -87,
"Transactions.deliveryMethod": "",
"soldTickets": 0,
"soldRevenue": 0,
}];
但我得到的回應不是我想要的。我究竟做錯了什么?提前致謝!
const productMap = {
soldTickets: 0,
soldRevenue: 0,
playedOffTickets: 0,
playedOffRevenue: 0,
};
const arr1 = [];
const arr2 = [
{
"Transactions.deliveryMethod": "Print At Home Delivery",
"Transactions.itemCount": "60",
"Transactions.revenue": "1730.5"
},
{
"Transactions.deliveryMethod": "Postal Delivery",
"Transactions.itemCount": "43",
"Transactions.revenue": "1160"
},
{
"Transactions.deliveryMethod": "Cobo Delivery",
"Transactions.itemCount": "12",
"Transactions.revenue": "348"
},
{
"Transactions.deliveryMethod": "",
"Transactions.itemCount": "-3",
"Transactions.revenue": "-87"
}
];
arr1.reduce((p, salesData) => {
const product = salesData["Transactions.deliveryMethod"];
p[product] = p[product] || {};
const soldTickets = Number(salesData["Transactions.itemCount"]);
const soldRevenue = Number(salesData["Transactions.revenue"]);
p[product].soldTickets = p[product].soldTickets || 0;
p[product].soldTickets = soldTickets;
p[product].soldRevenue = p[product].soldRevenue || 0;
p[product].soldRevenue = soldRevenue;
p[product]["Transactions.deliveryMethod"] = product;
return p;
}, productMap);
arr2.reduce((p, playedOffData) => {
const product = playedOffData["Transactions.deliveryMethod"];
p[product] = p[product] || {};
const playedOffTickets = Number(playedOffData["Transactions.itemCount"]);
const playedOffRevenue = Number(playedOffData["Transactions.revenue"]);
p[product].playedOffTickets = p[product].playedOffTickets || 0;
p[product].playedOffTickets = playedOffTickets;
p[product].playedOffRevenue = p[product].playedOffRevenue || 0;
p[product].playedOffRevenue = playedOffRevenue;
p[product]["Transactions.deliveryMethod"] = product;
return p;
}, productMap);
const productMapData = Object.values(productMap);
console.log(productMapData)
uj5u.com熱心網友回復:
我建議添加一個productMapDefaults物件,只要我們想在 productMap 物件中創建一個新條目,我們就會使用它。
然后可以根據需要進行自定義以添加新屬性。
const productMap = {};
const productMapDefaults = {
soldTickets: 0,
soldRevenue: 0,
playedOffTickets: 0,
playedOffRevenue: 0
}
const arr1 = [];
const arr2 = [
{
"Transactions.deliveryMethod": "Print At Home Delivery",
"Transactions.itemCount": "60",
"Transactions.revenue": "1730.5"
},
{
"Transactions.deliveryMethod": "Postal Delivery",
"Transactions.itemCount": "43",
"Transactions.revenue": "1160"
},
{
"Transactions.deliveryMethod": "Cobo Delivery",
"Transactions.itemCount": "12",
"Transactions.revenue": "348"
},
{
"Transactions.deliveryMethod": "",
"Transactions.itemCount": "-3",
"Transactions.revenue": "-87"
}
];
arr1.reduce((p, salesData) => {
const product = salesData["Transactions.deliveryMethod"];
// Use productMapDefaults as template when creating new entry...
p[product] = p[product] || { ...productMapDefaults };
const soldTickets = Number(salesData["Transactions.itemCount"]);
const soldRevenue = Number(salesData["Transactions.revenue"]);
p[product].soldTickets = p[product].soldTickets || 0;
p[product].soldTickets = soldTickets;
p[product].soldRevenue = p[product].soldRevenue || 0;
p[product].soldRevenue = soldRevenue;
p[product]["Transactions.deliveryMethod"] = product;
return p;
}, productMap);
arr2.reduce((p, playedOffData) => {
const product = playedOffData["Transactions.deliveryMethod"];
// Use productMapDefaults as template when creating new entry...
p[product] = p[product] || { ...productMapDefaults };
const playedOffTickets = Number(playedOffData["Transactions.itemCount"]);
const playedOffRevenue = Number(playedOffData["Transactions.revenue"]);
p[product].playedOffTickets = p[product].playedOffTickets || 0;
p[product].playedOffTickets = playedOffTickets;
p[product].playedOffRevenue = p[product].playedOffRevenue || 0;
p[product].playedOffRevenue = playedOffRevenue;
p[product]["Transactions.deliveryMethod"] = product;
return p;
}, productMap);
const productMapData = Object.values(productMap);
console.log(productMapData)
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/410833.html
標籤:
