我有以下陣列
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
},
]
所以這個陣列需要先按auctionProductName升序排序,如果按auctionProductName排序后有相同的物件,則需要按pricePerUnitPerHour排序。
為此,我有以下代碼按預期作業
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;
});
}
排序后我得到
[
{
"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
}
]
我找不到修改defaultTableSort函式的方法 - 所以第三個條件是數量 -
如果auctionProductName 和pricePerUnitPerHour 相同,那么我們應該按數量排序。
這意味著 ID 為 2 的第三個物件(排序后)需要位于 ID 為 1 的第二個物件之前。
uj5u.com熱心網友回復:
您可以鏈接想要的排序。
要獲得降序排序,您可以交換a和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; }
uj5u.com熱心網友回復:
只需添加另一個 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;
}
uj5u.com熱心網友回復:
您可以使用其他條件結構來驗證是否:
a.pricePerUnitPerHour === b.pricePerUnitPerHour
帶有最終代碼:
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;
});
}
uj5u.com熱心網友回復:
而不是嵌套 if 陳述句,你可以
function defaultTableSort() {
return arr = arr.sort(
function (a, b) {
if (a.auctionProductName === b.auctionProductName && a.pricePerUnitPerHour === b.pricePerUnitPerHour) {
return a.quanitity - b.quanitity;
}
if (a.auctionProductName === b.auctionProductName) {
return a.pricePerUnitPerHour - b.pricePerUnitPerHour;
}
return a.auctionProductName > b.auctionProductName ? 1 : -1;
});
}
這有輸出
[{
"id": 2,
"auctionProductName": "a",
"pricePerUnitPerHour": 22,
"quanitity": 2
}, {
"auctionProductName": "a",
"pricePerUnitPerHour": 22,
"quanitity": 20
}, {
"id": 1,
"auctionProductName": "a",
"pricePerUnitPerHour": 22,
"quanitity": 20
}, {
"auctionProductName": "a",
"pricePerUnitPerHour": 5555,
"quanitity": 20
}, {
"auctionProductName": "m",
"pricePerUnitPerHour": 1,
"quanitity": 20
}, {
"auctionProductName": "m",
"pricePerUnitPerHour": 22,
"quanitity": 20
}, {
"auctionProductName": "m",
"pricePerUnitPerHour": 2222,
"quanitity": 20
}]
uj5u.com熱心網友回復:
const 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,
},
];
const orderBy = (arr, props, orders) =>
[...arr].sort((a, b) =>
props.reduce((acc, prop, i) => {
if (acc === 0) {
const [p1, p2] = orders && orders[i] === 'desc' ? [b[prop], a[prop]] : [a[prop], b[prop]];
acc = p1 > p2 ? 1 : p1 < p2 ? -1 : 0;
}
return acc;
}, 0)
);
console.log(
JSON.stringify(
orderBy(arr, ['auctionProductName', 'pricePerUnitPerHour', 'quanitity'] /*, ['desc', 'desc', 'desc']*/),
null,
2
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435731.html
標籤:javascript 数组 排序
上一篇:陣列從哪里獲得該值?
