代码之家  ›  专栏  ›  技术社区  ›  Erik

如何根据类别对数组进行排序?[副本]

  •  -2
  • Erik  · 技术社区  · 6 年前

    我得到了以下对象数组:

    var source =  [
      {"name": "title_1", "category": "order"},
      {"name": "title_2", "category": "purchase"},
      {"name": "title_3", "category": "order"},
      {"name": "title_4", "category": "detail"},
      {"name": "title_5", "category": "order"},
      {"name": "title_6", "category": "purchase"},
    ]
    

    console.log(source.sort(function () {
       // todo: ?
    }))
    

    预期结果:

    [
      {"name": "title_1", "category": "order"},
      {"name": "title_3", "category": "order"},
      {"name": "title_5", "category": "order"},
      {"name": "title_4", "category": "detail"},
      {"name": "title_2", "category": "purchase"},
      {"name": "title_6", "category": "purchase"},
    ]
    

    如何编写排序函数以获得预期结果?

    1 回复  |  直到 6 年前
        1
  •  4
  •   kind user Faly    6 年前

    您可以创建一个拥有每个类别优先级的对象,然后根据该对象对其进行排序。

    const source =  [
      {"name": "title_1", "category": "order"},
      {"name": "title_2", "category": "purchase"},
      {"name": "title_3", "category": "order"},
      {"name": "title_4", "category": "detail"},
      {"name": "title_5", "category": "order"},
      {"name": "title_6", "category": "purchase"},
    ];
    
    const priority = {
       order: 3,
       detail: 2,
       purchase: 1,
    };
    
    const r = source.sort((a, b) => priority[b.category] - priority[a.category]);
    console.log(r);