代码之家  ›  专栏  ›  技术社区  ›  MDompekidis

如何对A-A-Z-Z列表进行排序?

  •  0
  • MDompekidis  · 技术社区  · 5 年前

    我需要按字母顺序对数据列表进行排序,但名称是a-a-Z-Z Antony 在名字之前 antony Zelda 先来后到 zelda 所以列表如下:

    - Abigail
    - Antony
    - abigail
    - antony
    - Zelda
    - zelda
    

    基本的

    list.sort(function (a, b) {
         if (a.name > b.name) return -1;
         if (a.name < b.name) return 1;
         return 0;
    });
    

    正在生成这样的列表:

    • 阿比盖尔
    • 安东尼
    • 泽尔达
    • 阿比盖尔
    • 安东尼
    • 泽尔达

    首选语言:Javascript

    3 回复  |  直到 5 年前
        1
  •  5
  •   Amadan    5 年前

    有一个内置的:

    let list = ["abigail", "Antony", "Abigail", "antony", "Zelda", "zelda"];
    
    list.sort((a, b) =>
      a.localeCompare(b, "en", { caseFirst: "upper" })
    );
    
    console.log(list);

    编辑:也许你想要这个?

    let list = ["abigail", "Antony", "Abigail", "antony", "Zelda", "zelda"];
    
    const compareUpperFirst = (a, b) => {
      if (a === "" && bb === "") return 0;
      if (a === "") return -1;
      if (b === "") return 1;
      let aa = a.charAt(0);
      let aal = aa.toLowerCase();
      let bb = b.charAt(0);
      let bbl = bb.toLowerCase();
      if (aal < bbl) return -1;
      if (aal > bbl) return 1;
      if (aa < bb) return -1;
      if (aa > bb) return 1;
      return compareUpperFirst(a.substr(1), b.substr(1));
    };
    
    list.sort(compareUpperFirst);
    
    console.log(list);