Javascript 按两个不同的属性对项目进行排序

Javascript 按两个不同的属性对项目进行排序,javascript,Javascript,我有一个对象数组 const people = [ { active: true, hasMoney: false }, { active: false, hasMoney: false }, { active: true, hasMoney: true } ] 我想按以下顺序对数据进行排序:active:true->hasMoney:true->active:false->hasMoney:fal

我有一个对象数组

const people = [
   {
     active: true,
     hasMoney: false
   },
   {
     active: false,
     hasMoney: false
   },
   {
     active: true,
     hasMoney: true
   }
]
我想按以下顺序对数据进行排序:
active:true
->
hasMoney:true
->
active:false
->
hasMoney:false

重要提示:如果用户是
active===true
hasMoney==true
,则应在
active==true
hasMoney==false之后排序

我尝试了以下方法,但没有成功。有人有什么想法吗

people
  .sort((x, y) =>
     x.hasMoney
       ? Number(x) - Number(y)
       : Number(isPersonActive(y)) - Number(isPersonActive(x))
)

您可以执行以下操作:

const people=[
{
主动:对,
有钱吗
},
{
活动:错误,
钱:假的
},
{
主动:对,
钱:假的
}
]
people.sort((a,b)=>{
如果(a.active和b.active){
返回a.hasMoney-b.hasMoney;
}否则,如果(a.激活){
返回-1;
}否则,如果(b.激活){
返回1;
}否则{
返回b.hasMoney-a.hasMoney;
}
})

console.log(人)像这样尝试。当两者都处于活动状态时(在campare上),按hasMoney排序

const sort=(arr)=>arr.sort((a,b)=>{
如果(a.active==b.active){
返回b.hasMoney-a.hasMoney;
}
返回b.active-a.active;
})
康斯特人=[
{
主动:对,
钱:假的
},
{
活动:错误,
钱:假的
},
{
主动:对,
有钱吗
}
]
常数人2=[
{active:true,hassmoney:false},
{active:false,hasMoney:false},
{active:false,hassmoney:true},
{主动:正确,有钱:正确},
];
控制台日志(排序(人员))
console.log(排序(people2))
const people=[
{
主动:对,
有钱吗
},
{
活动:错误,
钱:假的
},
{
主动:对,
钱:假的
},
{
活动:错误,
有钱吗
}
]
让peopleSorted=people.sort((a,b)=>{
如果(a.active==b.active){
如果(a.有钱b.有钱){
返回-1;
}否则{
返回0;
}
}否则,如果(a.激活){
返回-1;
}否则,如果(b.激活){
返回1;
}否则{
返回0;
}
});

console.log(peopleSorted)根据提供的条件使用或条件进行以下排序

const people=[
{
主动:对,
钱:假的
},
{
活动:错误,
钱:假的
},
{
活动:错误,
有钱吗
},
{
主动:对,
钱:假的
}
];
const a=people.sort((a,b)=>b.active-a.active | | |(b.hasMoney-a.hasMoney));

控制台日志(a)您可以获取布尔值的增量,并按两个属性进行排序,特别注意相同值的排序

constpeople=[{active:false,hasMoney:true},{active:true,hasMoney:false},{active:false,hasMoney:false},{active:true,hasMoney:true}];
people.sort((a,b)=>
b、 主动的,主动的
(a.hasMoney===b.active)-(a.active==b.hasMoney)
);
console.log(人)

作为控制台包装器{max height:100%!important;top:0;}
此代码将在以下测试用例中失败,
“[{active\”:true,\'hasMoney\:false,{active\”:false,{active\:false,\'hasMoney\:true},{active active\:true,\'hasMoney\:true}”
@sabbir.alam,感谢您的指出。已修复并更新。我刚刚在问题中添加了另一个条件-如果用户是活动的===true和hasMoney===true,那么应该在活动===true和hasMoney===false之后进行排序。您能为我编写订单吗?比如,如果active是假的,hasMoney是真的,那么当两者都是真的时,它将如何排序?谢谢。抱歉,但我刚才添加了一个更重要的部分-如果用户是
active====true
hasMoney===true
,那么应该在
active===true
hasMoney==false
更新后排序,请检查。混淆…,所以排序应该类似(active=true&hasMoney=false)->(active=true&hasMoney=true)->(active=false&hasMoney=true)->(active=true&hasMoney=true)->差不多,但不是最后一个。应该是:active=true&hasMoney=false)->(active=true&hasMoney=true)->(active=false&hasMoney=true)