我尝试了典型的排序功能并检查项目是否为字符串。但我得到了一个非常奇怪的输出。尝试了多种不同的方法。
var arr = [{section: '12.2.a'},
{section: '12.2.b.iii'},
{section: '12.2.c'},
{section: '12'},
{section: '12A'},
{section: '12.3.b'},
{section: '12.3.c'},
{section: 'Q2'},
{section: 'Q32'},
{section: 'Q6'},
{section: 'Q5'}]
var arr2 = arr.sort(function(a, b) {
var nums1 = a.section.split(".");
var nums2 = b.section.split(".");
for (var i = 0; i < nums1.length; i++) {
if (nums2[i]) {
if (nums1[i] !== nums2[i]) {
if (isNaN(parseInt(nums1[i])) && isNaN(parseInt(nums2[i]))) {
return nums1[i].localeCompare(nums2[i]);
}
return parseInt(nums1[i]) - parseInt(nums2[i]);
}
} else {
return 1;
}
}
return -1;
});
我应该使用 localeCompare 还是可以不使用?
希望输出为:
[
{section: '12'},
{section: '12A'},
{section: '12.2.a'},
{section: '12.2.b.iii'},
{section: '12.2.c'},
{section: '12.3.b'},
{section: '12.3.c'},
{section: 'Q2'},
{section: 'Q6'},
{section: 'Q5'}
{section: 'Q32'}]
非常感谢任何建议