本文正在参加「金石计划」
有这么一个需求,将金额后面的0抹掉。什么意思呢?举个例子:
- 9.00 -> 9
- 9.90 -> 9.9
- 9.99 -> 9.99
- 0.00 -> 0
拿到这个需求,我思考如何能够知道它末尾有几个无用的0。我是这么想的,假如我把字符串截取掉最后一位或两位时,判断这两个数值是否相同(通过两个字符相减可得),如果相同则被截取掉的是无用的0。
看以下代码:
// 截取最后一位
let price = '9.00';
price.slice(0, -1) // '9.0'
price - price.slice(0, -1) // 0
// 截取最后两位
let price = '9.01';
price.slice(0, -2) // '9.' 这边的9.当作为数字计算时将被转化成数字9来处理
price - price.slice(0, -2) // 0.01
有了这个条件,去除末尾的0就好办了。咱们写个格式化金额的函数:
function formatPrice(price) {
if(price - price.slice(0, -2) === 0) {
return price.slice(0, -3); // 要把多余的.干掉
} else if(price - price.slice(0, -1) === 0) {
return price.slice(0, -1);
} else {
return price;
}
}
测试:
完美马路比。再换成三元表达式:
function formatPrice(price) {
return price - price.slice(0, -2) === 0
? price.slice(0, -3)
: price - price.slice(0, -1) === 0
? price.slice(0, -1)
: price
}
效果一毛一样。好嗨森!优雅!实在是优雅,谁能想到这么绝绝子的办法呀。佩服佩服
然后,我就去百度了一下,看看大家是不是都如我这样机智。结果...
我发现我就是个傻子。话不多说,直接扔代码吧:
function formatPrice(price) {
return price * 1
}
且不说这代码简单吧,单从实现的效果都比我刚刚那个“优雅”的代码好。人家兼容字符串和数字的价格并且返回的是数字。我TMD...
结语
我们在日常开发中,常常会写一些自认为不错的代码,然而现实情况是,你这个就是个辣鸡。作为一个程序员,有一个通病就是觉得别人写的代码都是垃圾,自己写的都是优雅的,其实啊,多学习人家的代码,取其精华去其糟粕,我们才能进步,才能写出真正优雅的代码。
本文故事及代码均为真实案例,欢迎评论区讨论自己写过的“优雅代码”吧。期待JYM的留言