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 } ]Quiero ordenar esta matriz en orden ascendente (cantidad de la oferta), y si el ID de la oferta del proveedor es nulo, no lo ordene en la parte inferior.
lo intenté así
array.sort((a,b) => parseFloat(a.bidAmount) - parseFloat(b.bidAmount)).map((ele) => console.log(ele.bidAmount))Necesito una salida como 30,40,50,131,0,0, pero para mi código anterior solo ordenará. Intenté con reduce pero eso no funciona correctamente
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" = -1Sobre la base de lo que DragatS ha compartido... simplemente asigne el resultado de sort() como este para obtener el resultado de [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);