tengo la siguiente matriz
let arr = [ { auctionProductName: "m", pricePerUnitPerHour: 1, quanitity:20 }, { auctionProductName: "m", pricePerUnitPerHour: 22, quanitity:20 }, { auctionProductName: "a", pricePerUnitPerHour: 5555, quanitity:20 }, { auctionProductName: "a", pricePerUnitPerHour: 22, quanitity:20 }, { id:1, auctionProductName: "a", pricePerUnitPerHour: 22, quanitity:20 }, { auctionProductName: "m", pricePerUnitPerHour: 2222, quanitity:20 }, { id:2, auctionProductName: "a", pricePerUnitPerHour: 22, quanitity:2 }, ]por lo tanto, esta matriz debe ordenarse primero ASCENDIENDO en el nombre del producto de subasta, si hay los mismos objetos después de esta clasificación por nombre del producto de subasta, entonces deben ordenarse por precio por unidad por hora.
Para eso tengo el siguiente código que funciona como se esperaba
function defaultTableSort() { arr = arr.sort( function (a, b) { if (a.auctionProductName === b.auctionProductName) { return a.pricePerUnitPerHour - b.pricePerUnitPerHour; } return a.auctionProductName > b.auctionProductName ? 1 : -1; }); }después de la clasificación me sale
[ { "auctionProductName": "a", "pricePerUnitPerHour": 22, "quanitity": 20 }, { "id": 1, "auctionProductName": "a", "pricePerUnitPerHour": 22, "quanitity": 20 }, { "id": 2, "auctionProductName": "a", "pricePerUnitPerHour": 22, "quanitity": 2 }, { "auctionProductName": "a", "pricePerUnitPerHour": 5555, "quanitity": 20 }, { "auctionProductName": "m", "pricePerUnitPerHour": 1, "quanitity": 20 }, { "auctionProductName": "m", "pricePerUnitPerHour": 22, "quanitity": 20 }, { "auctionProductName": "m", "pricePerUnitPerHour": 2222, "quanitity": 20 } ] No puedo encontrar una manera de modificar mi función defaultTableSort , por lo que la tercera condición será por cantidad.
si el nombre del producto de la subasta y el precio por unidad por hora son iguales, debemos ordenar por cantidad.
Eso significa que el tercer objeto (DESPUÉS DE LA CLASIFICACIÓN) con una identificación de 2 debe estar antes del segundo objeto con una identificación de 1.
Podrías encadenar la clasificación deseada.
Para obtener una clasificación descendente, puede intercambiar a y b .
const array = [{ auctionProductName: "m", pricePerUnitPerHour: 1, quanitity: 20 }, { auctionProductName: "m", pricePerUnitPerHour: 22, quanitity: 20 }, { auctionProductName: "a", pricePerUnitPerHour: 5555, quanitity: 20 }, { auctionProductName: "a", pricePerUnitPerHour: 22, quanitity: 20 }, { id: 1, auctionProductName: "a", pricePerUnitPerHour: 22, quanitity: 20 }, { auctionProductName: "m", pricePerUnitPerHour: 2222, quanitity: 20 }, { id: 2, auctionProductName: "a", pricePerUnitPerHour: 22, quanitity: 2 }]; array.sort((a, b) => a.auctionProductName.localeCompare(b.auctionProductName) || a.pricePerUnitPerHour - b.pricePerUnitPerHour || a.quanitity - b.quanitity ); console.log(array); .as-console-wrapper { max-height: 100% !important; top: 0; }Solo agregue otra cláusula if
function (a, b) { if (a.auctionProductName === b.auctionProductName) { if(a.pricePerUnitPerHour === a.pricePerUnitPerHour) return a.quantity - b.quantity; return a.pricePerUnitPerHour - b.pricePerUnitPerHour; } return a.auctionProductName > b.auctionProductName ? 1 : -1; }Puede otra estructura condicional para verificar si:
a.pricePerUnitPerHour === b.pricePerUnitPerHour
con un código final:
function defaultTableSort() { arr = arr.sort( function (a, b) { if (a.auctionProductName === b.auctionProductName) { // auctionProductName is equal between a and b if (a.pricePerUnitPerHour === b.pricePerUnitPerHour) { // pricePerUnitPerHour is equal between a and b // sort based on: quantity return a.quantity - b.quantity } // sort based on: pricePerUnitPerHour return a.pricePerUnitPerHour - b.pricePerUnitPerHour; } // sort based on: auctionProductName return a.auctionProductName > b.auctionProductName ? 1 : -1; }); }