【发布时间】:2022-01-14 12:01:30
【问题描述】:
我有一个具有默认属性的对象和两个数组,其中一个是空的。 空数组在某些情况下可能不为空,但我仍然想循环它。如果数组为空,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)
【问题讨论】:
-
由于性别,您正在设置未定义的属性。你想要完成什么?你能添加你想要得到的预期结果吗?
标签: javascript arrays ecmascript-6 reduce