对房型数组按价格升序排序需先统一提取数字:数字类型直接使用,字符串类型用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() 配合数值比较函数:
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 的项:
立即学习“Java免费学习笔记(深入)”;
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;
});


















