Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象数组中将元素移动到顶部?_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 如何在对象数组中将元素移动到顶部?

Javascript 如何在对象数组中将元素移动到顶部?,javascript,arrays,sorting,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}]; 我想做的是,对数组进行排序,这样,使用isActiv

我有一个数组:

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

我发现解决方案如下:

user.sort(function(a,b){
   if (!b.isActive) {
        return -1;
    } else if (b.isActive) {
        return 1;
    }
    return 0;
});
这个比较短

user.sort(function(a, b) {
  return b.isActive - a.isActive
})

对布尔值的算术运算将布尔值强制为整数(1表示true,0表示false),如果比较函数返回负值,则a在b之前。如果a为真,b为假,a将置于b之前。如果b为真,a为假,则b置于a之前。

试试这个,我希望它能帮到你。谢谢

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;
});
请用它,谢谢

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);
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}];
sort(函数(a,b){返回b.isActive-a.isActive;});

console.log(用户)
不喜欢在两个布尔值之间使用
-
,我的解决方案是这样的,而且它在缺少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);

解决您的问题最简单的方法是: user.sort((a,b)=>b.isActive)


在这里,如果对象没有isActive属性,则默认情况下会假定该属性为false。希望这有帮助:)

您的排序函数必须是反对称的和可传递的。特别是,如果
a
b
都处于活动或非活动状态,则需要返回0。谢谢!,现在的问题是,有时对象没有isActive属性,如何解决这个问题?在开始时检查是否存在,如果属性不存在,则返回0。@ren No,不返回0。这将违反及物性。(true