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)