如何将元素移动到对象数组的顶部?

时间:2019-03-27 05:38:12

标签: javascript arrays sorting

我有一个数组为:

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
});

7 个答案:

答案 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。希望这会有所帮助:)