JS 中对包含浮点数、空字符串的数组排序

在 JS 中对包含浮点数、空字符串的数组排序,核心是先分类处理空字符串,再对含浮点数的字符串正常排序,避免空字符串导致的 NaN 干扰排序结果。

通常需求是将空字符串统一放在数组开头或末尾,其余带浮点数的字符串按数值大小排序,具体实现如下:

const arr = ["3.14 圆", "", "1.618 黄金比", "2.718 自然常数", "", "0.618 比例"];

const sortedArr = arr.sort((a, b) => {
  // 1. 处理空字符串:两个空字符串相等,空字符串排在非空前面
  if (a === "" && b === "") return 0;
  if (a === "") return -1; // a是空,让a排在b前面
  if (b === "") return 1;  // b是空,让b排在a前面

  // 2. 提取浮点数并排序(忽略空格和非数字字符)
  const numA = parseFloat(a.replace(/[^\d.]/g, ""));
  const numB = parseFloat(b.replace(/[^\d.]/g, ""));
  return numA - numB; // 浮点数升序(numB - numA 为降序)
});

console.log(sortedArr);
// 输出:["", "", "0.618 比例", "1.618 黄金比", "2.718 自然常数", "3.14 圆"]
  • 空字符串处理:空字符串用 parseFloat() 解析会得到 NaNNaN - 任何数 都是 NaN,导致排序混乱,因此必须优先单独处理。
  • 浮点数提取replace(/[^\d.]/g, "") 仅保留数字和小数点,确保 parseFloat() 能正确解析(如 " 5.2kg" → "5.2" → 5.2)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值