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