我有一个数组为:
var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];
我想做的是,对数组进行排序,以便具有isActive的用户为true,所有这些都推到顶部。我尝试了以下操作,但没有成功。
user.sort(function(a,b){
a.isActive ? 1 : b.isActive ? -1 : 0
});
答案 0 :(得分:1)
这更短
user.sort(function(a, b) {
return b.isActive - a.isActive
})
对布尔值的算术运算将布尔值强制转换为整数(1表示“真”,0表示“假”),并且如果比较函数返回负数,则a优先于b。如果a为true而b为false,则a将放置在b之前。如果b为true而a为false,则b置于a之前。
答案 1 :(得分:1)
var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];
user.sort(function(a, b){return b.isActive - a.isActive;});
console.log(user);
答案 2 :(得分:0)
我找到的解决方案是:
user.sort(function(a,b){
if (!b.isActive) {
return -1;
} else if (b.isActive) {
return 1;
}
return 0;
});
答案 3 :(得分:0)
尝试一下,希望对您有所帮助。谢谢
var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];
user.sort(function(x, y) {
return (x.isActive === y.isActive)? 0 : x.isActive? -1 : 1;
});
答案 4 :(得分:0)
请使用它,谢谢
var user = [
{
name: 'name1', isActive: false
},
{
name: 'name2', isActive: false
},
{
name: 'name3', isActive: true
},
{
name: 'name4', isActive: false
},
{
name: 'name9', isActive: true
},
{
name: 'name8', isActive: false
}
];
let sortedUser = user.sort(function(a,b){
if (!b.isActive) {
return -1;
} else if (b.isActive) {
return 1;
}
return 0;
});
console.log("Sorted", sortedUser);
答案 5 :(得分:0)
不喜欢在两个布尔值之间使用-
,我的解决方案将是这样,并且在没有isActive属性的情况下也可以很好地工作。
var users = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name8', isActive: true}, {name: 'name9', isActive: false}, {name: 'name10'}];
users.sort(function(l, u) {
var lv = l.isActive ? 1 : 2, uv = u.isActive ? 1 : 2;
return lv - uv;
});
console.log(users);
答案 6 :(得分:0)
最简单的解决方法是: user.sort(((a,b)=> b.isActive)
在这里,如果对象没有isActive属性,则默认情况下该属性为false。希望这会有所帮助:)