You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何实现列表先按字母排序、后按数字排序?

解决方案

你只需要修改sortSelect函数中的排序逻辑,自定义比较规则即可。同时注意原有add函数中取option文本的属性有误,原生DOM的option元素文本属性是text不是label,否则新增的选项会显示为空。

修改后的完整JS代码

function add() {
  var frm = document.getElementById('formAdmin');
  var selectedChnls = frm.selectedAssignedChnlOrgList;
  var activChnls = frm.activeChnl;
  var inactivChnls = frm.inactiveChnl;

  var activeAssignedChnlOrgList = frm.activeAssignedChnlOrgList

  for (i = 0; i < activChnls.length; i++) {
    if (activChnls[i].selected == true) {
      var opt = document.createElement('option');
      opt.value = activChnls[i].value;
      opt.innerHTML = activChnls[i].text; // 修正属性名:将label改为text
      activChnls[i].disabled = true;
      activChnls[i].selected = false;
      selectedChnls.appendChild(opt);
    }
  }
  sortSelect();
}

function sortSelect() {
  let frm = document.getElementById('formAdmin');
  let selElem = frm.selectedAssignedChnlOrgList;
  let tmpAry = new Array();
  for (let i = 0; i < selElem.options.length; i++) {
    tmpAry[i] = [selElem.options[i].text, selElem.options[i].value];
  }
  // 自定义排序规则
  tmpAry.sort((a, b) => {
    const textA = a[0].trim();
    const textB = b[0].trim();
    // 判断字符串是否以数字开头
    const isNumStartA = /^\d/.test(textA);
    const isNumStartB = /^\d/.test(textB);
    
    // 两者都是字母开头:按A-Z字母顺序排序
    if (!isNumStartA && !isNumStartB) {
      return textA.localeCompare(textB);
    }
    // A是字母开头、B是数字开头:A排在前面
    if (!isNumStartA && isNumStartB) {
      return -1;
    }
    // A是数字开头、B是字母开头:B排在前面
    if (isNumStartA && !isNumStartB) {
      return 1;
    }
    // 两者都是数字开头:按默认字典序排序
    return textA.localeCompare(textB);
  });
  // 清空原有选项后重新渲染
  selElem.options.length = 0;
  tmpAry.forEach(item => {
    selElem.options.add(new Option(item[0], item[1]));
  });
}

排序效果

  • 优先展示所有字母开头的选项,按A-Z顺序排列:Accountancy → Animal and Plant Resource → Business, Consulting and Management...依次排列
  • 所有字母选项排完后,再展示数字开头的选项:4L开头的排在最前,之后依次是1763615、1863615、2540722开头的选项

内容的提问来源于stack exchange,提问作者user13902584

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:07