首页 > 解决方案 > 使用javascript对数组问题进行排序

问题描述

我正在尝试对这个数组进行排序:

var arr = ["abc", "def", "1", "6", "4", "33", "10", "]", "20", "nike", "za", "(", "ABC"]; 

我希望排序的结果是:

["1", "4", "6", "10", "20", "33", "ABC", "abc", "def", "nike", "za", "(", "]"] 

我尝试了以下代码,但问题是关于“10”,它出现在“1”之后。我无法解决这个问题。谁能帮忙?

标签: javascriptarrayssorting

解决方案


似乎您可以使用optionson解决大部分问题localeCompare。要最后对非字母数字进行排序,您可以在排序中添加一个简单的正则表达式:

var arr = ["abc", "def", "1", "6", "4", "33", "10", "]", "20", "nike", "za", "(", "ABC"]; 

let re = new RegExp('[0-9a-z]', 'i')
arr.sort((a,b) =>  
     (re.test(b) - re.test(a)) 
     || a.localeCompare(b, 'en', {numeric: true, caseFirst:"upper"}))

console.log(arr)


推荐阅读