gpt4 book ai didi

javascript - 对数组中的数据进行分组

转载 作者:行者123 更新时间:2023-11-30 15:28:25 26 4
gpt4 key购买 nike

我有一个包含不同对象的数组,其中每个对象都是一个订单。看起来像这样:

array = [
{
doc : {
date: "2017-03-06T16:48:23.080Z",
products:[
{
product: "Product 1",
number: 3
},
{
product: "Product 2",
number: 2
}
]
}
},
{
doc : {
date: "2017-03-07T16:48:23.080Z",
products:[
{
product: "Product 2",
number: 10
},
{
product: "Product 3",
number: 1
}
]
}
}
]

我希望能够获取这些数据并将其推送到新数组中,其中每个数组都有一个日期属性(按日期分组)和一个产品嵌套数组,该数组对不同的订单进行分组(按产品分组)。像这样:

array = [
{
date: 'Date X',
products: [
{
product: 'product 1',
units: 3
},
{
product: 'product 2',
units: 2
}
]
},
{
date: 'Date Y',
products: [
{
product: 'product 2',
units: 10
},
{
product: 'product 3',
units: 1
}

]
}
]

你会如何处理这个问题?到目前为止,我已经尝试使用 Lodash 尝试重用一些旧代码,但没有成功。可以用 forEach 来完成吗?

最佳答案

使用 lodash 和 ES6 的解决方案:

// Remove unnecesary .doc properties
let arrayWithoutDoc = _.map(array, el => el.doc);

// Group by dates to single object
let grouped = _.groupBy(arrayWithoutDoc, el => el.date);

// Convert object to requested format
let result = _.map(grouped, (value, date) => ({
date: date,
products: sumProductsUnits(
_.flatMap(value, el => el.products)
)
}));

// Function for grouping unique products with sum of units
function sumProductsUnits(products) {
var productGroups = _.groupBy(products, productObj => productObj.product);

return _.map(productGroups, (productGroup, productName) => ({
product: productName,
units: productGroup.reduce((sum, val) => sum + val.number, 0)
}))
}

我假设 units 等于原始对象中的 number

result 包含:

[
{
"date":"2017-03-06T16:48:23.080Z",
"products":[
{
"product":"Product 1",
"units":3
},
{
"product":"Product 2",
"units":2
}
]
},
{
"date":"2017-03-07T16:48:23.080Z",
"products":[
{
"product":"Product 2",
"units":10
},
{
"product":"Product 3",
"units":1
}
]
}
]

关于javascript - 对数组中的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42610343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com