首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据两个值按字母顺序对数组中的对象排序

根据两个值按字母顺序对数组中的对象排序
EN

Stack Overflow用户
提问于 2021-03-08 07:27:56
回答 1查看 78关注 0票数 0

我有一个可以按某些值排序的表。目前它是按特定的equipmentStatus排序的(不是按字母顺序,而是在下面的initialStatusSorting变量中定义的)。但是,如果它们具有相同的equipmentStatus值,我还需要按字母顺序对项目名称进行排序。我给出一个我现在拥有的示例,正如您所看到的,当name相同时,我希望对equipmentStatus进行排序

代码语言:javascript
运行
复制
[
   {
    equipmentStatus: "available",
    name: "ab pump"
   },
   {
    equipmentStatus: "available",
    name: "aa pump"
   },
   {
    equipmentStatus: "available",
    name: "zbe pump"
   },
   {
    equipmentStatus: "allocated",
    name: "tr pump"
   },
   {
    equipmentStatus: "allocated",
    name: "vx pump"
   },
   {
    equipmentStatus: "allocated",
    name: "re pump"
   },
   {
    equipmentStatus: "RequestMaintenance",
    name: "tt pump"
   },
   {
    equipmentStatus: "RequestMaintenance",
    name: "vd pump"
   },
   {
    equipmentStatus: "RequestMaintenance",
    name: "ph pump"
   },
]

现在,我有了以下函数来根据给定的规范对equipmentStatus进行排序,但是我仍然需要按字母顺序对name键上具有相同equipmentStatus的对象进行排序。

代码语言:javascript
运行
复制
    const initialStatusSorting = { "Available" : 1, "Allocated": 2, "RequestMaintenance": 3, "RequestRepair": 4 , "Pickup": 5, default: Infinity };
    this.fetchOverviewPumps(requiredIds).then(() => {
      this.overviewPumps.allPumps.sort(function (a, b) {
        return (initialStatusSorting[a.equipmentStatus] || initialStatusSorting.default) - (initialStatusSorting[b.equipmentStatus] || initialStatusSorting.default) || a.equipmentStatus.localeCompare(b.equipmentStatus);
      });
    })```

所以重述一下:我需要对两个键值进行排序,其中一个在特定的equipmentStatus上已经可以使用上面的排序功能了,但是我不能在具有相同equipmentStatus值的对象上进行额外的字母排序。

为了实现这一点,我需要在现有函数中添加什么?

感谢您的帮助!

,Coen

EN

回答 1

Stack Overflow用户

发布于 2021-04-05 05:36:31

如果equipmentStatus相同,要根据名称的字母顺序对其进行排序,您只需在代码中更改以下行:

代码语言:javascript
运行
复制
return (initialStatusSorting[a.equipmentStatus] || initialStatusSorting.default) - (initialStatusSorting[b.equipmentStatus] || initialStatusSorting.default) || a.equipmentStatus.localeCompare(b.equipmentStatus);

要这样做:

代码语言:javascript
运行
复制
if (a.equipmentStatus !== b.equipmentStatus)
  return (initialStatusSorting[a.equipmentStatus] || initialStatusSorting.default) - (initialStatusSorting[b.equipmentStatus] || initialStatusSorting.default) || a.equipmentStatus.localeCompare(b.equipmentStatus);
else
  return a.name.localeCompare(b.name);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66522587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档