所以我在互联网上徘徊,寻找js中的排序功能。这是问题所在。
我们有一个像这样的字符串数组:

['único', 'UNICO', 'árbol', 'ARBOL', 'cosas', 'COSAS', 'fútbol', 'FUTBOL']

我们想要这样的东西(大写优先):
['ARBOL', 'COSAS', 'FUTBOL', 'UNICO', 'árbol', 'cosas', 'fútbol', 'único']

或这样(小写优先):
['árbol', 'cosas', 'fútbol', 'único', 'ARBOL', 'COSAS', 'FUTBOL', 'UNICO']

事情是:真的很容易做到这一点:
['ARBOL', 'COSAS', 'FUTBOL', 'UNICO', 'cosas', 'fútbol', 'árbol','único']

使用.sort();函数,但我们不希望在结尾使用重音词,因此我们使用
.sort(function(a, b) {
  return a.localCompare(b);
});

但是我们最终得到了...
['ARBOL', 'árbol', 'COSAS', 'cosas', 'FUTBOL', 'fútbol', 'UNICO', 'único']

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

最佳答案

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

const arr = ['ÁRBOL', 'único', 'UNICO', 'árbol', 'ARBOL', 'cosas', 'COSAS', 'fútbol', 'FUTBOL'];

function startsWithUppercase(str) {
    return str.substr(0, 1).match(/[A-Z\u00C0-\u00DC]/);
}

arr.sort(function(a, b) {
    if (startsWithUppercase(a) && !startsWithUppercase(b)) {
        return -1;
    } else if (startsWithUppercase(b) && !startsWithUppercase(a)) {
        return 1;
    }
    return a.localeCompare(b);
});

console.log(arr);

关于javascript - 排序字符串数组时先将大写字母包括重音符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56253008/

10-12 17:40
查看更多