工作中碰到了一些可以和业务剥离并封装为工具函数的逻辑,按照自己的想法写了一下记录在这里,以后碰到新的会在这里追加更新。读者朋友如果有更好的实现或者任何建议,非常欢迎你的指教和关怀!
判断是否为老版本
偶尔会碰到要对APP老版本做兼容处理的情形。
function isOldVersion (boundry, current) {
const boundryArr = boundry.split('.')
const currentArr = current.split('.')
for (let i = 0; i < 3; i++) {
const bound = Number(boundryArr[i])
const curr = Number(currentArr[i])
if (cuur < bound) {
return true
} else if (curr > bound) {
return false
}
}
return false
}
input | output |
---|---|
isOldVersion('5.1.0', '4.2.34') | true |
isOldVersion('5.1.0', '11.3.22') | false |
isOldVersion('5.1.0', '5.1.0') | false |
价格格式化
有时要给价格加逗号,但服务端返回的数据格式各一。
function formatPrice (price) {
if (!price) {
return 0
}
if (/,/.test(price)) {
return price
}
price = String(price)
const intPrice = price.match(/\d+/)[0]
const HOLDER = 'HOLDER'
const holder = price.replace(intPrice, HOLDER)
const intPriceArr = intPrice.split('').reverse()
let res = ''
intPriceArr.forEach((item, index) => {
if (index % 3 === 0 && index) {
res = item + ',' + res
} else {
res = item + res
}
})
return holder.replace(HOLDER, res)
}
还可以用 Number
的 toLocaleString
方法替换手动加逗号的过程:
function formatPrice (value) {
if (!value) {
return 0
}
if (/,/.test(value)) {
return value
}
value = String(value)
const reg = /\d+\.?\d*/
const HOLDER = 'HOLDER'
const price = value.match(reg)[0]
const holder = value.replace(price, HOLDER)
value = holder.replace(HOLDER, Number(price).toLocaleString())
return value
}
input | output |
---|---|
formatPrice(2689999) | 2,689,999 |
formatPrice('2689999') | 2,689,999 |
formatPrice('2689999元') | 2,689,999元 |
formatPrice('裸车价:¥2689999') | 裸车价:¥2,689,999 |
formatPrice('优惠:2689999元') | 优惠:2,689,999元 |
formatPrice('到手价:2689999.99元') | 到手价:2,689,999.99元 |
formatPrice('2,689,999') | 2,689,999 |
formatPrice('') | 0 |
formatPrice() | 0 |