记录常用格式化函数

101 阅读2分钟

使用场景: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'