我正在嘗試通過作為歌曲檔案名的字串對物件串列進行排序,有時檔案名包括數字和字母,但是我嘗試過的每種排序方法都不會按照您期望的順序對檔案名進行排序,例如如下例所示,預期輸出為:
Track 1
Track 2
Track 10
但它被錯誤地排序為:
Track 1
Track 10
Track 2
var inputFiles=[
{
'name':'Track 1.wav'
},
{
'name':'Track 2.wav'
},
{
'name':'Track 10.wav'
},
]
console.log('sort audio files by title: ', inputFiles)
let sortedAudio = inputFiles.sort(function(a, b) {
var textA = a['name'].toUpperCase();
var textB = b['name'].toUpperCase();
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});
console.log('sortedAudio=',sortedAudio)
uj5u.com熱心網友回復:
比較字串textA < textB將根據每個字符的字典順序為您提供結果 - 在這種情況下1 10 2是正確的順序。比較數字的差異而不是進行字串比較,為此您必須僅提取字串的數字部分。-可以使用,這將首先將每一邊轉換為一個數字。
var inputFiles = [{
'name': 'Track 1.wav'
},
{
'name': 'Track 2.wav'
},
{
'name': 'Track 10.wav'
},
]
console.log('sort audio files by title: ', inputFiles);
inputFiles.sort((a, b) => a.name.match(/\d /)[0] - b.name.match(/\d /)[0]);
console.log('sortedAudio=', inputFiles);
uj5u.com熱心網友回復:
String#localeCompare如果您設定numeric選項,可以為您處理數字。記得檢查當前瀏覽器是否支持options,如果不支持,則回退到像CertainPerformance's answer之類的方法。
var inputFiles = [
{ 'name': 'Track 10.wav' },
{ 'name': 'Track 1.wav' },
{ 'name': 'Track 2.wav' },
{ 'name': 'Track 7.wav' },
{ 'name': 'Unknown Track.wav' },
{ 'name': 'Track 4.wav' },
{ 'name': 'Track 100.wav' },
{ 'name': 'Track 13.wav' },
{ 'name': 'Track 20.wav' },
{ 'name': 'Unknown Track.wav' }
];
const sortedAudio = inputFiles.sort((a,b) =>
a.name.localeCompare(b.name, undefined, { numeric: true }));
console.log('sortedAudio: ', sortedAudio);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427517.html
標籤:javascript 细绳 排序 目的
上一篇:每次呼叫函式時使用什么React鉤子讓它重新渲染串列?
下一篇:如何按字母對嵌套字典進行排序?
