本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述:
现有商品列表数据 itemList,请写一个数据结构转换函数 convert,将该商品列表按照商品分类(category)进行分组,且分组间按该分类下商品的种数进行倒序排序,在每一分组下按商品的销量(saleCount)进行倒序排序。 要求不能对原数据 itemList 的任意属性值进行修改
const itemList = [
{ "id": 1, "name": "商品1", "category": "家居百货", "saleCount": 20 },
{ "id": 2, "name": "商品2", "category": "个护美妆", "saleCount": 18 },
{ "id": 3, "name": "商品3", "category": "水乳饮品", "saleCount": 33 },
{ "id": 4, "name": "商品4", "category": "休闲零食", "saleCount": 42 },
{ "id": 5, "name": "商品5", "category": "个护美妆", "saleCount": 50 },
{ "id": 6, "name": "商品6", "category": "休闲零食", "saleCount": 37 },
{ "id": 7, "name": "商品7", "category": "休闲零食", "saleCount": 48 },
{ "id": 8, "name": "商品8", "category": "家居百货", "saleCount": 79 },
{ "id": 9, "name": "商品9", "category": "休闲零食", "saleCount": 26 },
{ "id": 10, "name": "商品10", "category": "家居百货", "saleCount": 10 }
];
function convert (itemList) {
// 你的代码实现,可以借助 lodash 或 underscore 工具库
}
console.log(convert(itemList))
/*
[
{
"category" : "休闲零食",
"items" : [
{ "id": 7, "name": "商品7", "category": "休闲零食", "saleCount": 48 },
{ "id": 4, "name": "商品4", "category": "休闲零食", "saleCount": 42 },
{ "id": 6, "name": "商品6", "category": "休闲零食", "saleCount": 37 },
{ "id": 9, "name": "商品9", "category": "休闲零食", "saleCount": 26 },
]
},
...
]
二、思路分析:
考察实际业务数据处理能力;
三、AC 代码:
function convert(data) {
return Array.from(new Set(data.map((d) => d.category)))
.map((type) => ({
category: type,
items: data
.filter((d) => type === d.category)
.sort((a, b) => b.saleCount - a.saleCount),
}))
.sort((a, b) => b.items?.length - a.items?.length);
}
console.log(convert(itemList));
四、总结:
试着参加掘金活动打个卡;