商品列表排序 | 刷题打卡

270 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述:

现有商品列表数据 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));

四、总结:

试着参加掘金活动打个卡;