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

如何使用JavaScript对带不同尺寸单位的列表项进行正确排序

前端列表尺寸排序优化方案

方案1:使用自定义数据属性(最推荐)

这是成本最低、出错概率最小的实现方式,不需要做复杂的单位解析:

  • 给每个<li>添加data-size-cm自定义属性,直接存储转换为厘米后的数值作为排序基准

修改后的HTML示例:

<ul class="list-name">
  <li class="other-classes size-10-CM" data-size-cm="10">10 CM</li>
  <li class="other-classes size-1V5-METRO" data-size-cm="150">1,5 M</li>
  <li class="other-classes size-2-METROs" data-size-cm="200">2 M</li>
  <li class="other-classes size-10-CM" data-size-cm="20">20 CM</li>
</ul> 

对应的JS排序代码:

const list = document.querySelector('.list-name');
const items = Array.from(list.children);
// 按data-size-cm的数值升序排序
items.sort((a, b) => {
  return Number(a.dataset.sizeCm) - Number(b.dataset.sizeCm);
});
// 重新插入到列表中完成排序
items.forEach(item => list.appendChild(item));

这个方案完全不需要处理类名、文本的格式适配问题,后续单位规则变更也只需要调整属性值即可,性能和可维护性都是最优的。

方案2:无法修改HTML结构时的轻量解析方案

如果确实不能修改原有HTML添加自定义属性,也可以做简单的单位解析,逻辑并不复杂:

  • 优先从li的文本内容提取数值和单位,或从类名匹配size-开头的片段
  • 统一转换为厘米数值后再排序

参考代码:

const list = document.querySelector('.list-name');
const items = Array.from(list.children);

// 尺寸转厘米的工具函数
function getCmValue(item) {
  // 这里以解析文本为例,也可以替换为解析类名的逻辑
  const text = item.textContent.trim();
  // 替换逗号为小数点,提取数值和单位
  const [, numStr, unit] = text.match(/([\d,]+)\s*(CM|M)/) || [];
  const num = Number(numStr.replace(',', '.'));
  return unit === 'M' ? num * 100 : num;
}

// 排序
items.sort((a, b) => getCmValue(a) - getCmValue(b));
items.forEach(item => list.appendChild(item));

如果需要从类名解析,只需要修改getCmValue函数的匹配逻辑,匹配类名中size-开头的片段,把V替换为小数点,METRO相关的统一按米处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:08