【问题标题】:Sort array order of lower and uppercase [duplicate]小写和大写的排序数组顺序[重复]
【发布时间】:2019-06-27 13:54:16
【问题描述】:

假设我们有一个如下数组

let names = ['Malek', 'malek', 'sana', 'ghassen', 'Ghada', 'Samir']; 
console.log(names.sort()); 

结果如下:

["Ghada", "Malek", "Samir", "ghassen", "malek", "sana"]

JavaScript 根据其 ASCII 值比较每个字符。

我想在排序后的数组中按小写字母排在第一位,

预期输出:

 ["Ghada", "ghassen", "malek", "Malek", "Samir", "sana"]

谢谢

【问题讨论】:

    标签: javascript arrays algorithm sorting


    【解决方案1】:

    localeCompare 试试这个:

    const names = ["Ghada", "Malek", "Samir", "ghassen", "malek", "sana"];
    const result = names.sort((a, b) => a.localeCompare(b)); 
    
    console.log(result);

    localeCompare() 方法返回一个数字,指示字符串在排序顺序中是在 compareString 之前、之后还是相等。

    【讨论】:

      【解决方案2】:

      试一试,

      let names = ['Malek', 'malek', 'sana', 'ghassen', 'Ghada', 'Samir']; 
      console.log(names.sort(function(a, b) {
        var nameA = a.toUpperCase(); // ignore upper and lowercase
        var nameB = b.toUpperCase(); // ignore upper and lowercase
        if (nameA < nameB) {
          return -1;
        }
        if (nameA > nameB) {
          return 1;
        }
      
        // names must be equal
        return 0;
      }));

      【讨论】:

        【解决方案3】:

        你可以使用Intl.Collator():

        let names = ['Malek', 'malek', 'sana', 'ghassen', 'Ghada', 'Samir', "A", 'a', 'ba', 'Ba', 'Cd', 'ca']; 
        let res = names.sort(Intl.Collator('en').compare);
        
        console.log(res);

        【讨论】:

          猜你喜欢
          • 2012-12-04
          • 2018-12-14
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-08
          相关资源
          最近更新 更多