如何在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 }
];
…我想按状态对其进行排序,但:
- 先把"拆"掉,
- "加"一秒,
- “无”的三分之一,以及
- “隐藏”的最后一个
我能想到的唯一办法是将每个对象及其各自的状态设置为一个数组,然后将它们重新组合在一起。谢谢。考虑到名为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)代码>