【问题标题】:How to order array based on category? [duplicate]如何根据类别排序数组? [复制]
【发布时间】:2018-12-05 05:25:05
【问题描述】:

我有以下对象数组:

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"},
]

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

【问题讨论】:

标签: javascript sorting


【解决方案1】:

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

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);

【讨论】:

  • 这是一个重复的问题,但您确实提供了一个很好的替代答案。 +1
猜你喜欢
  • 2016-01-30
  • 2021-12-15
  • 2020-05-15
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2016-07-12
相关资源
最近更新 更多