js常用方法utils

/**
 * @name: 钱保留两位小数 不足补0
 * @param {String | Number} value 要处理的数据
 * @param {Number} tofixed 保留几位小数
 * @return {*}
 */
export const toDecimal = (value) => {
	const num = parseFloat(value);
	if (isNaN(num)) return;
	let rn = (parseInt(num * 100) / 100).toString();
	let rs = rn.indexOf('.');
	if (rs < 0) {
		rs = rn.length;
		rn += '.';
	}
	while (rn.length <= rs + 2) {
		rn += '0';
	}
	return rn;
};

/**
 * @name: 获取地址栏参数
 * @param {string} name 需要获取的参数
 * @return {*}
 */
export const GetQueryString = (name) => {
	let reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i');
	let r = location.search.substr(1).match(reg);
	if (r != null) return unescape(decodeURI(r[2]));
	return null;
};

/**
 * @name: 日期格式化
 * @param {Date} objDate 'new Date()'
 * @param {string} fmt 'yyyy-MM-dd HH:mm:ss'(传入的格式)
 * @return {*}
 */
export const formatDate = (objDate, fmt) => {
	const o = {
		'M+': objDate.getMonth() + 1, // 月份
		'd+': objDate.getDate(), // 日
		'h+': objDate.getHours() % 12 === 0 ? 12 : objDate.getHours() % 12, // 小时
		'H+': objDate.getHours(), // 小时
		'm+': objDate.getMinutes(), // 分
		's+': objDate.getSeconds(), // 秒
		'q+': Math.floor((objDate.getMonth() + 3) / 3), // 季度
		'S': objDate.getMilliseconds() // 毫秒
	};
	if (/(y+)/.test(fmt)) {
		fmt = fmt.replace(
			RegExp.$1,
			`${objDate.getFullYear()}`.substr(4 - RegExp.$1.length)
		);
	}
	Object.keys(o).forEach((k) => {
		if (new RegExp(`(${k})`).test(fmt)) {
			fmt = fmt.replace(
				RegExp.$1,
				RegExp.$1.length === 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length)
			);
		}
	});
	return fmt;
};

/**
 * 判断此对象是否是Object类型
 * @param {Object} obj  
 */
export const isObject = (obj) => {
	return Object.prototype.toString.call(obj) === '[object Object]';
};

/**
 *  深度比较两个对象是否相同
 * @param {Object} oldData 
 * @param {Object} newData 
 */
export const equalsObj = (oldData, newData) => {
	// 类型为基本类型时,如果相同,则返回true
	if (oldData === newData) return true;
	if (isObject(oldData) && isObject(newData) && Object.keys(oldData).length === Object.keys(newData).length) {
		// 类型为对象并且元素个数相同
		// 遍历所有对象中所有属性,判断元素是否相同
		for (const key in oldData) {
			if (oldData.hasOwnProperty(key)) {
				if (!equalsObj(oldData[key], newData[key]))
					// 对象中具有不相同属性 返回false
					return false;
			}
		}
	} else if (Array.isArray(oldData) && Array.isArray(oldData) && oldData.length === newData.length) {
		// 类型为数组并且数组长度相同
		for (let i = 0, length = oldData.length; i < length; i++) {
			if (!equalsObj(oldData[i], newData[i]))
				// 如果数组元素中具有不相同元素,返回false
				return false;
		}
	} else {
		// 其它类型,均返回false
		return false;
	}
	// 走到这里,说明数组或者对象中所有元素都相同,返回true
	return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值