对房型数组按价格升序排序需先统一提取数字:数字类型直接使用,字符串类型用parsefloat()转换,带符号字符串用正则/\d+.?\d*/匹配后转换;空值或nan默认置为infinity;推荐用[...rooms].sort()避免修改原数组。

直接对房型数组调用 sort() 方法,注意价格字段可能是字符串(如 "¥388")或数字,需先提取纯数字再比较。
确认价格字段的数据类型
接口返回的 price 字段常见形式有三种:
-
price: 388—— 数字类型,可直接排序 -
price: "388"或price: "388.00"—— 字符串数字,用parseFloat()转换 -
price: "¥388"或price: "¥388起"—— 带符号/文字,需正则提取数字:parseFloat(price.match(/[\d.]+/)?.[0] || '0')
按价格升序排序(从低到高)
使用 Array.prototype.sort() 配合数值比较函数:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
rooms.sort((a, b) => {
const getPrice = (item) => {
const val = item.price;
if (typeof val === 'number') return val;
if (typeof val === 'string') {
return parseFloat(val.match(/[\d.]+/)?.[0]) || 0;
}
return 0;
};
return getPrice(a) - getPrice(b);
});
支持降序、空值和异常防护
更健壮的写法,自动跳过无价格、NaN 或 undefined 的项:
rooms.sort((a, b) => {
const getNum = (p) => {
if (p == null) return Infinity;
if (typeof p === 'number') return p;
if (typeof p === 'string') {
const n = parseFloat(p.match(/[\d.]+/)?.[0]);
return isNaN(n) ? Infinity : n;
}
return Infinity;
};
return getNum(a.price) - getNum(b.price); // 升序
// return getNum(b.price) - getNum(a.price); // 降序
});
排序后保留原始数据,生成新数组
避免修改原数组,推荐用扩展运算符创建副本:
const sortedRooms = [...rooms].sort((a, b) => {
const aPrice = parseFloat(a.price?.match(/[\d.]+/)?.[0]) || 0;
const bPrice = parseFloat(b.price?.match(/[\d.]+/)?.[0]) || 0;
return aPrice - bPrice;
});Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










