尝试从嵌套的对象数组中对对象进行分组时遇到一些问题



我正在尝试对一些嵌套的对象数组进行分组。在我的以下数据中,有一个"products"密钥属性。如果vendor.email相同,我正在尝试对产品进行分组。在对产品进行分组后,我还想在每个组上放置paymentDetails密钥属性。

这是我的密码。我可以对产品进行分组,但无法在每个分组上设置paymentDetails密钥和值。

const data= [
{
_id: "622d70a49bd88b1599026318",
products: [
{
_id: "6223186e2278d4e502f5264a",
title: "Product number 1",
price: 600,
cartQuantity: 1,
vendor: {email: "vendor1@gmail.com"}
},
{
_id: "622d4e9f9bd88b1599026317",
title: "asdas",
price: 100,
cartQuantity: 5,
vendor: {
email: "vendor2@gmail.com"
}
},
{
_id: "622d4e9f9bd88b1599026317",
title: "asdas",
price: 100,
cartQuantity: 5,
vendor: {
email: "vendor2@gmail.com"
}
},
],
paymentDetails: {
createdId: 1647145079,
date: "Sun Mar 13 2022",
amount: 700,
email: "user@gmail.com",
last4: "4242",
transaction: "p"
},
status: "Pending",
billing: {
country: "BD",
name: "Md. Fathe Karim",
phone: "+88010000000",
line1: "Madhabdi",
city: "Narshingdi",
postal_code: "1604",
state: "Bandarban"
}
}]
const mapped = {};                       // MY function
data[0].products.forEach(item => {
if (item.vendor.email in mapped) return mapped[item.vendor.email].push(item); 
mapped[item.vendor.email] = [item];
});
const expectedFormat = Object.keys(mapped).map(key => {
const o = {}; 
o["orders"] = mapped[key];
return o; 
});
console.log(expectedFormat)

我的预期结果是:

[
{
"orders": [
{
"_id": "6223186e2278d4e502f5264a",
"title": "Product number 1",
"price": 600,
"vendor": {
"email": "vendor1@gmail.com"
}
}
],
"paymentDetails": {
createdId: 1647145079,
amount: 700,
email: "user@gmail.com",
}
},
{
"orders": [
{
"_id": "622d4e9f9bd88b1599026317",
"title": "Product number 2",
"price": 100,
"vendor": {
"email": "vendor2@gmail.com"
}
},
{
"_id": "622d4e9f9bd88b1599026317",
"title": "Product number 3",
"price": 100,
"vendor": {
"email": "vendor2@gmail.com"
}
}
],
"paymentDetails": {
createdId: 1647145079,
amount: 700,
email: "user@gmail.com",
}
}
]

expectedFormat.forEach(orders => orders.paymentDetails = data[0].paymentDetails);工作吗?我可能误解了。

如果要添加的不仅仅是paymentDetails键,请在箭头后面添加括号。

expectedFormat.forEach(orders => {
orders.paymentDetails = data[0].paymentDetails;
orders.status = data[0].status;
orders.billing = data[0].billing;
});

最新更新