Javascript 按升序对对象数组排序,但将所有零放在末尾

Javascript 按升序对对象数组排序,但将所有零放在末尾,javascript,Javascript,如果我有一个对象数组: [{ val: 0 }, { val: 1 }, { val: 0 }, { val: 3 }] 如何按升序排序,但将零保留在末尾,如下所示: [{val:1}, {val:3}, {val: 0},{val: 0}] 正如预期的那样,排序会将零放在顶部。即使我在末尾添加逻辑对零进行排序: array.sort((a,b) => { if (a.val === 0 || b.val === 0) return 1;

如果我有一个对象数组:

[{
    val: 0
}, {
    val: 1
}, {
    val: 0
}, {
    val: 3
}]
如何按升序排序,但将零保留在末尾,如下所示:

[{val:1}, {val:3}, {val: 0},{val: 0}]
正如预期的那样,排序会将零放在顶部。即使我在末尾添加逻辑对零进行排序:

array.sort((a,b) => {
    if (a.val === 0 || b.val === 0) return 1;
    return a.val < b.val;
});
array.sort((a,b)=>{
如果(a.val==0 | | b.val==0)返回1;
返回a.val
您可以检查零并将这些值移到底部,然后按值排序

var数组=[{val:0},{val:1},{val:0},{val:3}];
排序((a,b)=>(a.val==0)-(b.val==0)| | a.val-b.val);
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
如果
a.val
为0,则返回
1
。如果
b.val
为0,则返回
-1

var数组=[{val:0},{val:1},{val:0},{val:3}];
array.sort((a,b)=>{
if(a.val==0)返回1;//返回1,以便b首先进入
if(b.val==0)返回-1;//返回-1,以便a首先进入
返回a.val-b.val;
});

console.log(数组)只需过滤掉零和非零数组,对非零数组和concat进行排序

请尝试以下操作:

var-arr=[{
瓦尔:0
}, {
瓦尔:1
}, {
瓦尔:0
}, {
瓦尔:3
}];
var非零=arr.filter((a)=>a.val!==0);
var zeroArray=arr.filter((a)=>a.val==0);
非零排序((a,b)=>(a.val-b.val));
arr=非零。concat(零数组);

控制台日志(arr)定义比较器。如果元素为0,则视为较大。不能同时为a==0和b==0返回1