Aar*_* C. 7 javascript arrays sorting string
所以我在互联网上徘徊,寻找js中的排序功能。这是问题所在。我们有一个像这样的字符串数组:
['único', 'UNICO', 'árbol', 'ARBOL', 'cosas', 'COSAS', 'fútbol', 'FUTBOL']
Run Code Online (Sandbox Code Playgroud)
我们想要这样的东西(大写优先):
['ARBOL', 'COSAS', 'FUTBOL', 'UNICO', 'árbol', 'cosas', 'fútbol', 'único']
Run Code Online (Sandbox Code Playgroud)
或这样(小写优先):
['árbol', 'cosas', 'fútbol', 'único', 'ARBOL', 'COSAS', 'FUTBOL', 'UNICO']
Run Code Online (Sandbox Code Playgroud)
问题是:真的很容易做到这一点:
['ARBOL', 'COSAS', 'FUTBOL', 'UNICO', 'cosas', 'fútbol', 'árbol','único']
Run Code Online (Sandbox Code Playgroud)
与.sort();
功能,但我们不希望在结尾使用重音词,因此我们使用
.sort(function(a, b) {
return a.localCompare(b);
});
Run Code Online (Sandbox Code Playgroud)
但是我们最终得到了...
['ARBOL', 'árbol', 'COSAS', 'cosas', 'FUTBOL', 'fútbol', 'UNICO', 'único']
Run Code Online (Sandbox Code Playgroud)
你们对如何将两者结合有任何想法吗?
您可以简单地扩展排序函数以优先考虑字符串开头的大写字符:
\n\nconst arr = [\'\xc3\x81RBOL\', \'\xc3\xbanico\', \'UNICO\', \'\xc3\xa1rbol\', \'ARBOL\', \'cosas\', \'COSAS\', \'f\xc3\xbatbol\', \'FUTBOL\'];\r\n\r\nfunction startsWithUppercase(str) {\r\n return str.substr(0, 1).match(/[A-Z\\u00C0-\\u00DC]/);\r\n}\r\n\r\narr.sort(function(a, b) {\r\n if (startsWithUppercase(a) && !startsWithUppercase(b)) {\r\n return -1;\r\n } else if (startsWithUppercase(b) && !startsWithUppercase(a)) {\r\n return 1;\r\n }\r\n return a.localeCompare(b);\r\n});\r\n\r\nconsole.log(arr);
Run Code Online (Sandbox Code Playgroud)\r\n