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

时间:2021-03-07 23:27:56

标签: javascript arrays sorting object key-value

我有一个可以按特定值排序的表格。目前它是按特定的设备状态排序(不是按字母顺序,而是在下面的 initialStatusSorting 变量中定义)。但是,如果它们具有相同的设备状态值,我还需要按字母顺序对项目名称进行排序。我举了一个例子,正如你所看到的,我希望在 name 相同时对 equipmentStatus 进行排序

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

现在我有以下函数可以根据给定的规格对设备状态进行排序,但是我仍然需要按字母顺序对 name 键上具有相同设备状态的对象进行排序。

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

总结一下:我需要对 2 个键值进行排序,特定设备状态上的键值已经可以使用上面的排序功能,但是我无法对具有相同 equipmentStatus 值的对象进行额外的字母排序.

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

感谢您的帮助!

,科恩

1 个答案:

答案 0 :(得分:1)

如果设备状态相同,还要根据名称的字母顺序对其进行排序,您只需要在代码中更改这一行:

return (initialStatusSorting[a.equipmentStatus] || initialStatusSorting.default) - (initialStatusSorting[b.equipmentStatus] || initialStatusSorting.default) || a.equipmentStatus.localeCompare(b.equipmentStatus);

为此:

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);
相关问题