使用场景:uni-app(H5、小程序)、vue
以下均为本人在实际开发过程中使用频率较高的格式化函数,后续会继续补充
校验是否为空
Object、Array类型单独用prototype + Object.keys()判断,其余判断是否为非空即可
/**
* @param {*Any} data 需要判断的数据
* @param {*Boolean} beZero 是否可以为0
*/
export function empty(data, beZero = false) {
if (['[object Object]', '[object Array]'].includes(Object.prototype.toString.call(data))) {
return !Object.keys(data).length
} else if (data == 0) {
return !beZero
} else {
return !data
}
}
使用decimal.js转为千分符数字
因在uni小程序环境下遇到过安卓手机负数异常,所以采用绝对数方式拼接负数符号‘-’ fd.isNumber()为重写判断数字方法,下篇文章会有
import Decimal from 'decimal.js';
import * as fd from "./fast_decimal.js"
/**
* @param {*Number String} data 需要处理的数据
* @param {*Number} precision 保留小数位数
* @param {*String} round Decimal省略方法, 默认四舍五入
*/
export function number(data, precision = 2, round = 'ROUND_HALF_UP') {
let res = fd.isNumber(data) ? data : 0
const isLessZero = data < 0
let arr = Decimal(res).abs().toFixed(precision, Decimal[round]).split('.')
const decimal = precision > 0 ? `.${arr[1]}` : ''
return `${isLessZero ? '-' : ''}${Number(arr[0]).toLocaleString()}${decimal}`
}
使用moment.js时间格式转换
import moment from 'moment';
/**
* @param {*Number String} date 需要处理的数据
* @param {*Number} format 保留格式
*/
export function date(date, format = 'YYYY-MM-DD HH:mm:ss') {
if (!date) return ''
if (!moment(date).isValid()) return date
return moment(date).format(format)
}
匹配字典
/**
* @param {*Number String} value 需要处理的数据
* @param {*Array<Object>} list 字典数据数组
* @param {*String} nameKey 名称key,默认name
* @param {*String} valueKey 值key,默认value
*/
// 默认匹配是或否字典
const DICT_YES_OR_NO = [
{ sCodeName: '是', sCodeValue: '1' },
{ sCodeName: '否', sCodeValue: '0' }
]
export function dict(value, list = DICT_YES_OR_NO, nameKey = 'name', valueKey = 'value') {
const res = list.find(item => item[valueKey] == value)
return res ? res[nameKey] : value
}
平铺数组
/**
* @param {*Array<Object>} list 数据数组
* @param {*String} key 名称key
*/
export function array(list, key = "name") {
let res = ''
if (Array.isArray(list)) {
list.forEach((item, index) => {
const value = item[key]
res += index > 0 ? ', ' + value : value
})
}
return res
}
在main.js中挂载即可全局使用
import * as formatFunctions from "./utils/format.js"
Vue.prototype.fmfs = formatFunctions
fmfs.empty({}) // true
fmfs.number('9999999.9999') // '9,999,999.99'
fmfs.date('2023-01-30T14:20:22') // '2023-01-30'
fmfs.dict('10', [{name: 'dictName', value: '10'}]) // 'dictName'
fmfs.array([{name: 'dictName', value: '10'}]) // 'dictName'