如何排序与条件的对象数组?


let array = [
{
"vendorBidId": null,
"participantName": "test+10@mail.com",
"bidAmount": 0,
"productionRate": null,
"bidTime": null,
"isYou": false,
"awarded": false
},
{
"vendorBidId": 16,
"participantName": "test+2@mail.com",
"bidAmount": 131,
"productionRate": 131,
"bidTime": "2021-09-18T08:11:21.295",
"isYou": true,
"awarded": false
},
{
"vendorBidId": 20,
"participantName": "test@mail.com",
"bidAmount": 30,
"productionRate": 30,
"bidTime": "2021-0a-18T08:11:21.295",
"isYou": true,
"awarded": false
},
{
"vendorBidId": 30,
"participantName": "test@mail.com",
"bidAmount": 40,
"productionRate": 40,
"bidTime": "2021-0a-18T08:11:21.295",
"isYou": true,
"awarded": false
},
{
"vendorBidId": null,
"participantName": "test+10@mail.com",
"bidAmount": 0,
"productionRate": null,
"bidTime": null,
"isYou": false,
"awarded": false
},
{
"vendorBidId": 40,
"participantName": "test@mail.com",
"bidAmount": 50,
"productionRate": 50,
"bidTime": "2021-0a-18T08:11:21.295",
"isYou": true,
"awarded": false
}
]

我想对这个数组按升序排序(bidAmount),如果vendorBidId是空的,不要在底部排序。

我试过了

array.sort((a,b) => parseFloat(a.bidAmount) - parseFloat(b.bidAmount)).map((ele) => console.log(ele.bidAmount))

我需要像30,40,50,131,0,0这样的输出,但对于上面的代码,它只会排序。我尝试过减少,但不能正常工作

array.sort((a,b) => {
const n = a.vendorBidId === null ? Number.MAX_VALUE : a.bidAmount;
const m = b.vendorBidId === null ? Number.MAX_VALUE : b.bidAmount;
return n - m; 
});
// "2.5" + "3.5" = "2.53.5"
// "2.5" - "3.5" = -1 
  1. 根据vendorBidId是否为空来分隔数组
  2. 对要排序的部分进行排序
  3. 连接其他数组

建立在DragatS共享的基础上。只需像这样映射sort()的结果,就可以得到[30,40,50,131,0,0]

的结果。
const res = array
.sort((a, b) => {
const n = a.vendorBidId === null ? Number.MAX_VALUE : a.bidAmount;
const m = b.vendorBidId === null ? Number.MAX_VALUE : b.bidAmount;
return n - m;
})
.map(item => item.bidAmount);
console.log(res);