【发布时间】:2021-08-05 05:48:51
【问题描述】:
我正在尝试找到按类别分组并在 O (n) 中迭代产品以从类别中获得一些见解的最佳方法。
我有样本数据:
[
{
"code": 25754,
"description": "ADAPTADOR BLUETOOH USB RECEPTOR DE AUDIO P2",
"price": 5.0,
"stock": 10,
"category": {
"id": 1,
"name": "Adapters"
}
},
{
"code": 20212,
"description": "ADAPTADOR CONECTOR HDMI FEMEA L / FEMEA",
"price": 2.8,
"stock": 20,
"category": {
"id": 2,
"name": "Eletronics"
}
},
]
我需要反转关系,拥有一个包含相应产品的类别列表,为此我编写了这个解决方案
function group_by_categories(products) {
const categories = {}
for (const product of products) {
const { category, ...cleanedProduct } = product
categories[category.id] = categories[category.id] || category
categories[category.id].products = categories[category.id].products || []
categories[category.id].products.push(cleanedProduct)
}
return Object.values(categories)
}
// returns
[
{ id: 1, name: 'Adapters', products: [ [Object] ] },
{ id: 2, name: 'Eletronics', products: [ [Object] ] }
]
但我在两件事上苦苦挣扎。
-
这是扭转关系的最佳方式吗?如何在没有对象用作唯一键的 C 等其他语言中复制它?
-
一旦您拥有此类数据,迭代类别和产品(例如查看一个类别有多少项目)的唯一方法是 O (n²)?
感谢所有帮助,即使您只能回答一个问题。另外,对不起我的英语不好,我在这里尽量说清楚。
【问题讨论】:
-
您应该将问题限制在一个问题上。 “这是扭转关系的最佳方式吗?” 更适合Code Review。 “我怎样才能用另一种语言复制它”这个问题太宽泛了。您应该具体了解目标语言并展示您的工作以及您遇到的问题。关于时间复杂度的问题是可以的。
标签: javascript c algorithm grouping