在 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()解析会得到NaN,NaN - 任何数都是NaN,导致排序混乱,因此必须优先单独处理。 - 浮点数提取:
replace(/[^\d.]/g, "")仅保留数字和小数点,确保parseFloat()能正确解析(如" 5.2kg"→"5.2"→5.2)。

2106

被折叠的 条评论
为什么被折叠?



