[英]Sort the strings in intended order
我有字符串數組
sample0
sample1
sample11
sample12
sample13
sample14
sample2
sample21
sample3
但是我需要這樣。 我不知道解決方案。 前綴可能不會一直采樣。
sample0
sample1
sample2
sample3
sample11
sample12
sample13
sample14
sample21
使用正則表達式/\\d+$/
可以將字符串末尾顯示的數字與Array的sort()
進行匹配,如下所示:
var strArr = ['sample0', 'sample1', 'sample11', 'sample12', 'sample13', 'sample14', 'sample2', 'sample21', 'sample3']; var strRes = strArr.sort(function(a, b){ return a.match(/\\d+$/) - b.match(/\\d+$/); }) console.log(strRes);
注意:這只會從末尾提取數字,並將根據該數字進行排序。
解決方案1:
var arr = ['sample0', 'sample1', 'sample11', 'sample12', 'sample13', 'sample14', 'sample2', 'sample21', 'sample3']
arr.sort(function (a, b) {
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
});
console.log(arr);
localeCompare()方法返回一個數字,該數字指示參考字符串是按排序順序位於給定字符串之前還是之后還是與之相同。
參考: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
解決方案2:
function naturalCompare(a, b) {
var ax = [], bx = [];
a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });
while(ax.length && bx.length) {
var an = ax.shift();
var bn = bx.shift();
var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
if(nn) return nn;
}
return ax.length - bx.length;
}
arr.sort(naturalCompare);
console.log(arr);
如果前綴“ sample”是常量,則
var numString=['sample1','sample12','sample123','sample2','sample0','sample23'];
var num=new Array(numString.length);
for (var i = 0; i < numString.length; i++) {
num[i]=numString[i].substring(6);
}
var st=numString[0].substring(0,6);
num.sort();
var ne=(st + num.join(';' + st)).split(';');
alert(ne);
智能排序包可以完成此任務。 我確定還有其他解決方案。 查找關鍵字“自然排序”和“智能排序”。
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var myArray = ['sample1', 'sample12', 'sample3'];
myArray.sort(collator.compare);
試試看
var array = ['sample0','sample1','sample11','sample12','sample13', 'sample14','sample2','sample21','sample3'] var sortedArray = array.sort(function(a, b){ var regXStr = /[^a-zA-Z]/g, regXNum = /[^0-9]/g; var aStr = a.replace(regXStr, "").toLowerCase(); var bStr = b.replace(regXStr, "").toLowerCase(); if(aStr === bStr) { var aNum = parseInt(a.replace(regXNum, ""), 10); var bNum = parseInt(b.replace(regXNum, ""), 10); return aNum === bNum ? 0 : aNum > bNum ? 1 : -1; } else { return aStr > bStr ? 1 : -1; } }); console.log(sortedArray)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.