对字符串数组进行排序,其中大写首先包含重音

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)

你们对如何将两者结合有任何想法吗?

fjc*_*fjc 5

您可以简单地扩展排序函数以优先考虑字符串开头的大写字符:

\n\n

\r\n
\r\n
const 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
\r\n
\r\n

\n