如何在javascript中根据对象属性按选择的顺序对数组中的对象进行排序?

如何在javascript中根据对象属性按选择的顺序对数组中的对象进行排序?,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,假设我有这样一个数组: var objects = [ { name: "steve", status: added }, { name: "john", status: added }, { name: "drew", status: none }, { name: "aaron", status: none }, { name: "jeff", status: hidden }, { name: "gil", status: hidden }, { name: "

假设我有这样一个数组:

var objects = [
  { name: "steve", status: added },
  { name: "john", status: added },
  { name: "drew", status: none },
  { name: "aaron", status: none },
  { name: "jeff", status: hidden },
  { name: "gil", status: hidden },
  { name: "marc", status: removed },
  { name: "bill", status: removed }
];
…我想按状态对其进行排序,但:

  • 先把"拆"掉,
  • "加"一秒,
  • “无”的三分之一,以及
  • “隐藏”的最后一个
既然这不是按字母顺序排列的,我该如何使用sort方法来做呢


我能想到的唯一办法是将每个对象及其各自的状态设置为一个数组,然后将它们重新组合在一起。谢谢。

考虑到名为objects的数组变量,您应该实现排序比较函数:

objects = [
  { name: "steve", status: added },
  ...
]
你应使用:

objects.sort(compareFunction);
其中objects是数组实例,compareFunction是可以使用条件定义的函数

在compare函数中,根据排序条件返回1、0或-1

例如,可以使用辅助关联对象:

var aux = {
  "removed": 1, "added": 2, "none": 3, "hidden": 4
};
然后您的比较功能将是:

objects.sort(function(a,b) {
  return aux[a.status] - aux[b.status];
});

根据您希望状态显示的顺序为每个状态分配一个值,然后比较映射的顺序值

const arr=[
{姓名:“史蒂夫”,状态:“添加”},
{姓名:“约翰”,状态:“添加”},
{姓名:“drew”,状态:“none”},
{姓名:“亚伦”,状态:“无”},
{姓名:“杰夫”,状态:“隐藏”},
{名称:“gil”,状态:“隐藏”},
{名称:“marc”,状态:“已删除”},
{名称:“法案”,状态:“已删除”}
];
常量顺序={
删除:1,
加:2,,
无:3,
隐藏:4,
};
arr.sort((a,b)=>订单[a.status]-订单[b.status]);
//已排序:删除、添加、无、隐藏
控制台日志(arr)