如果我有一个对象数组:
[{
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;
});
答案 0 :(得分:5)
如果a.val
为0,则返回1
。如果b.val
为0,则返回-1
var array = [{val: 0}, {val: 1}, {val: 0}, {val: 3}];
array.sort((a, b) => {
if (a.val === 0) return 1; //Return 1 so that b goes first
if (b.val === 0) return -1; //Return -1 so that a goes first
return a.val - b.val;
});
console.log(array);
答案 1 :(得分:2)
您可以检查零,然后将此值移到底部,然后按值排序。
var array = [{ val: 0 }, { val: 1 }, { val: 0 }, { val: 3 }];
array.sort((a, b) => (a.val === 0) - (b.val === 0) || a.val - b.val);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
只需过滤掉零和非零数组,对非零数组进行排序并同时合并。
尝试以下操作:
var arr = [{
val: 0
}, {
val: 1
}, {
val: 0
}, {
val: 3
}];
var nonZero = arr.filter((a)=>a.val !== 0);
var zeroArray = arr.filter((a)=>a.val === 0);
nonZero.sort((a,b)=>(a.val -b.val));
arr = nonZero.concat(zeroArray);
console.log(arr);
答案 3 :(得分:0)
定义比较器。如果元素为0,则将其视为更大。您不能同时为a == 0和b == 0返回1。