This question already has answers here:
Sort Array Elements (string with numbers), natural sort
(8个答案)
3年前关闭。
我想在javascript中实现此排序结果。
A1-1,A1-3,A1-3-1,A1-4,A2,A4-1,A6-3,A13-1,A13-2,A13-3,A13-11,A13-14,A51- 2个
但是我用此代码有以下结果。
A1-1,A1-3,A1-3-1,A1-4,A13-1,A13-11,A13-14,A13-2,A13-3,A2,A4-1,A51-2,A6- 3
我尝试了这个图书馆。
https://gist.github.com/think49/660141
但这没有用。首先是“A23”,然后是“A3-1”。
我阅读了这篇文章并尝试了它。
Javascript : natural sort of alphanumerical strings
但是它只能在IE11上运行,而不能在Safari上运行。我需要支持IE9和Safari。
我需要你的帮助。谢谢!
(8个答案)
3年前关闭。
我想在javascript中实现此排序结果。
A1-1,A1-3,A1-3-1,A1-4,A2,A4-1,A6-3,A13-1,A13-2,A13-3,A13-11,A13-14,A51- 2个
但是我用此代码有以下结果。
sortedAlphabetListData.sort(
function(a,b){
if( a[0] < b[0] ) return -1;
if( a[0] > b[0] ) return 1;
return 0;
}
);
A1-1,A1-3,A1-3-1,A1-4,A13-1,A13-11,A13-14,A13-2,A13-3,A2,A4-1,A51-2,A6- 3
我尝试了这个图书馆。
https://gist.github.com/think49/660141
但这没有用。首先是“A23”,然后是“A3-1”。
我阅读了这篇文章并尝试了它。
Javascript : natural sort of alphanumerical strings
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var sortedAlphabetListData = alphabetListData.sort(collator.compare);
但是它只能在IE11上运行,而不能在Safari上运行。我需要支持IE9和Safari。
我需要你的帮助。谢谢!
最佳答案
您可以采用字符串的所有分离部分来进行客制化排序。
function customSort(data, order) {
function isNumber(v) {
return (+v).toString() === v;
}
var sort = {
asc: function (a, b) {
var i = 0,
l = Math.min(a.value.length, b.value.length);
while (i < l && a.value[i] === b.value[i]) {
i++;
}
if (i === l) {
return a.value.length - b.value.length;
}
if (isNumber(a.value[i]) && isNumber(b.value[i])) {
return a.value[i] - b.value[i];
}
return a.value[i].localeCompare(b.value[i]);
},
desc: function (a, b) {
return sort.asc(b, a);
}
},
mapped = data.map(function (el, i) {
var string = el.replace(/\d(?=[a-z])|[a-z](?=\.)/gi, '$&. .'),
regex = /(\d+)|([^0-9.]+)/g,
m,
parts = [];
while ((m = regex.exec(string)) !== null) {
parts.push(m[0]);
}
return { index: i, value: parts, o: el, string: string };
});
mapped.sort(sort[order] || sort.asc);
return mapped.map(function (el) {
return data[el.index];
});
}
var array = ['A1-1', 'A1-3', 'A1-3-1', 'A1-4', 'A2', 'A4-1', 'A6-3', 'A13-1', 'A13-2', 'A13-3', 'A13-11', 'A13-14', 'A51-2'];
console.log(customSort(array));
console.log(customSort(array, 'desc'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
10-06 14:53