如何将货币值列表按整数排序?对象价格排序的类型转换问题
解决带$符号价格的对象排序问题
这个坑我踩过!你说得没错,直接排序字符串格式的价格会按字典序来,所以"$12"会排在"$3"前面——因为字符串比较是逐个字符比的,第二个字符"1"比"3"小嘛。
核心思路就是把价格字符串转换成数字,用数字作为排序的依据就行,下面给你两种常见语言的实现:
JavaScript 实现
假设你有一个对象数组,直接用sort()方法配合自定义比较函数:
// 示例对象数组 const items = [ { price: "$1", title: "Item A", city: "New York" }, { price: "$3", title: "Item B", city: "Los Angeles" }, { price: "$22", title: "Item C", city: "Chicago" }, { price: "$12", title: "Item D", city: "Houston" } ]; // 按价格升序排序 const sortedByPrice = items.sort((a, b) => { // 去掉$符号,转成整数 const numA = parseInt(a.price.replace("$", ""), 10); const numB = parseInt(b.price.replace("$", ""), 10); // 升序返回 numA - numB,降序就反过来写 numB - numA return numA - numB; }); console.log(sortedByPrice); // 输出结果就是按$1、$3、$12、$22排序的对象数组
Python 实现
Python里用sorted()函数的key参数更简洁:
# 示例对象列表 items = [ {"price": "$1", "title": "Item A", "city": "New York"}, {"price": "$3", "title": "Item B", "city": "Los Angeles"}, {"price": "$22", "title": "Item C", "city": "Chicago"}, {"price": "$12", "title": "Item D", "city": "Houston"} ] # 按价格升序排序,key是转换后的数字 sorted_items = sorted(items, key=lambda item: int(item["price"].lstrip("$"))) print(sorted_items) # 同样会得到你想要的排序结果
小提示
如果你的价格里有小数(比如"$19.99"),记得把parseInt换成parseFloat(JS),int换成float(Python),这样排序就不会丢失小数精度啦!
内容的提问来源于stack exchange,提问作者Zevvysan
相关产品推荐
相关产品推荐

