根据它们的状态属性对我的对象数组进行自定义排序

ebi*_*bin -1 javascript

我必须根据它们的状态属性对我的对象数组进行排序

例如,我有以下数组

[
{userName:"One", status:"Live"},
{userName:"Two", status:"Rejected"},
{userName:"Three", status:"To Do"},
{userName:"Four", status:"Verify"},
{userName:"Five", status:"Received"},
{userName:"Six", status:"In Progress"}
]
Run Code Online (Sandbox Code Playgroud)

排序后,我需要一个看起来像的数组

[
{userName:"Three", status:"To Do"},
{userName:"Five", status:"Received"},
{userName:"Six", status:"In Progress"},
{userName:"Two", status:"Rejected"},
{userName:"Four", status:"Verify"},
{userName:"One", status:"Live"}
]
Run Code Online (Sandbox Code Playgroud)

需要根据其状态属性按以下顺序对项目进行排序

  1. 去做
  2. 已收到
  3. 进行中
  4. 拒绝了
  5. 核实
  6. 居住

可以有多个具有相同状态的项目。

31p*_*piy 7

您可以按顺序定义一个状态数组,然后使用状态的索引对数组进行排序。

let status = {
  'To Do': 1,
  'Received': 2,
  'In Progress': 3,
  'Rejected': 4,
  'Verify': 5,
  'Live': 6
};

let data = [{
    userName: "One",
    status: "Live"
  },
  {
    userName: "Two",
    status: "Rejected"
  },
  {
    userName: "Three",
    status: "To Do"
  },
  {
    userName: "Four",
    status: "Verify"
  },
  {
    userName: "Five",
    status: "Received"
  },
  {
    userName: "Six",
    status: "In Progress"
  }
];

data.sort((a, b) => status[a.status] - status[b.status]);
console.log(data);
Run Code Online (Sandbox Code Playgroud)

  • 代码片段中有一个全局变量 `status`,将 `var` 更改为 `let`,它就可以工作了。这就是为什么 ES6 是一个东西。此外`data = data.sort(...)` 是多余的。`sort()` 方法就地运行,因此不需要赋值。 (3认同)