我的陣列是
let arr=['20336.41905.32121.58472_20336.41905.60400.51092_1',
'20336.41905.32121.58472_20336.41905.60400.48025_2',
'20336.41905.32121.58472_20336.41905.41816.60719_3',
'20336.41905.32121.58472_20336.41905.41816.63631_4',
'20336.41905.32121.58472_20336.41905.31747.22942_2',
]
想要像這樣排序
['20336.41905.32121.58472_20336.41905.60400.51092_1', '20336.41905.32121.58472_20336.41905.60400.48025_2', '20336.41905.32121.58472_20336.41905.31747.22942_2', '20336.41905.32121.58472_20336.41905.41816.60719_3', '20336.41905.32121.58472_20336 .41905.41816.63631_4',
]
uj5u.com熱心網友回復:
我們可以嘗試使用 lambda 運算式進行排序:
var arr = ['20336.41905.32121.58472_20336.41905.60400.51092_1',
'20336.41905.32121.58472_20336.41905.60400.48025_2',
'20336.41905.32121.58472_20336.41905.41816.60719_3',
'20336.41905.32121.58472_20336.41905.41816.63631_4',
'20336.41905.32121.58472_20336.41905.31747.22942_2',
];
arr.sort((a, b) => parseInt(a.split(/_(?!.*_)/)[1]) - parseInt(b.split(/_(?!.*_)/)[1]));
console.log(arr);
上面使用的邏輯是在每個陣列值的最后一個下劃線上進行拆分,并將右側的數字決議為整數。然后我們對每對數字進行比較以實作排序。
uj5u.com熱心網友回復:
假設您正在使用 JavaScript...
該sort函式可以將回呼作為引數。您可以使用它來確定您希望對陣列進行排序的標準。
在比較 2 個值時,如果在 之后,compare a to b函式應該回傳一個大于零的數字,如果在之前,則回傳小于零,如果任何一個可以跟隨另一個,則正好為零(即 1.10 和 1.100 可以排序為 [1.10, 1.00] 或[1.100, 1.00] 因為我們關心它們具有相同的值,在您的特定情況下,以 4 結尾的 2 個陣列元素將遵循相同的原則,因為這是我們標準中的唯一數字)。abab
一個例子是:
arr.sort((a, b)=>{
return parseInt(a.slice(-1)) - parseInt(b.slice(-1))
})
請注意,這僅在陣列的每個元素上的最后一個字符是數字字符時才有效,并且如果最后兩個字符相等,則不會關心倒數第二個字符。
也有一個最丑陋的解決方案可以作業,雖然我并不真正推薦它,但它會以相反的順序考慮所有字符。映射所有元素,反轉它們,在不使用回呼 ( arr.sort()) 的情況下對陣列進行排序,然后再次反轉所有元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514769.html
標籤:数组排序
下一篇:排序未回傳正確排序的值
