這個問題在這里已經有了答案: Javascript - 按多個條件對陣列進行排序 (5 個回答) 5 天前關閉。
我想通過id和對物件陣列進行排序name。
樣本資料:
[
{
"case": {
"name": "Exemple1"
},
"id": 3
},
{
"case": {
"name": "Exemple1"
},
"id": 2
},
{
"case": {
"name": "Exemple2"
},
"id": 1
},
{
"case": {
"name": "Exemple3"
},
"id": 4
},
{
"case": {
"name": "Exemple2"
},
"id": 6
}
]
我想根據物件中id的name欄位進行排序case?是否可以在排序中使用兩個標準?
預期結果:
[
{
"case": {
"name": "Exemple1"
},
"id": 2
},
{
"case": {
"name": "Exemple1"
},
"id": 3
},
{
"case": {
"name": "Exemple2"
},
"id": 1
},
{
"case": {
"name": "Exemple2"
},
"id": 6
},
{
"case": {
"name": "Exemple3"
},
"id": 4
}
]
如何在我的排序中使用兩個標準?
uj5u.com熱心網友回復:
當然有可能。
該Array#sort方法采用一個可選引數compareFunction,該引數表示在對陣列中的任意兩項進行排序時要執行的邏輯。
通過傳遞先比較 by case.namethen by的函式id,您可以按這兩個條件對陣列進行排序。這是一個簡單的示例,盡管您可能希望添加錯誤檢查,以便您不要嘗試讀取undefined屬性。
const unsortedData = [
{ "case": { "name": "Exemple1" }, "id": 3 },
{ "case": { "name": "Exemple1" }, "id": 2 },
{ "case": { "name": "Exemple2" }, "id": 1 },
{ "case": { "name": "Exemple3" }, "id": 4 },
{ "case": { "name": "Exemple2" }, "id": 6 }
];
const sortedData = unsortedData.sort((a, b) => {
if (a.case.name > b.case.name) return 1;
if (a.case.name < b.case.name) return -1;
if (a.id > b.id) return 1;
if (a.id < b.id) return -1;
return 0;
});
console.dir(sortedData);
uj5u.com熱心網友回復:
您可以array#sort與自定義比較器一起使用。您可以使用條件 OR 在多個條件下進行比較。
arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id)
const arr = [{ "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ];
arr.sort((a,b) => a.case.name.localeCompare(b.case.name) || a.id - b.id);
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351243.html
標籤:javascript 数组 排序
