-------------------
判断字段是否为空(0,false除外)
/**
* 判断字段是否为空(0,false除外)
* @param v 要判断的模目标值
* @returns true | false
*/
isFieldEmpty(v) {
const strV = JSON.stringify(v);
return (
v == undefined ||
v === '' ||
(v.trim && v.trim() === '') ||
strV === '{}' ||
strV === '[]'
);
},
去除对象中空字段(0和false除外)
/**
* 去除对象中空字段(0和false除外)
* @param obj 要判断的目标对象
* @returns 去除空值后的对象
*/
removeEmptyField(obj = {}) {
const type = this.getPropertyType(obj);
if (type === 'Object') {
const result = JSON.parse(JSON.stringify(obj));
for (const key in result) {
if (Object.prototype.hasOwnProperty.call(result, key)) {
const element = result[key];
if (this.getPropertyType(element) === 'String') {
// 字符串前后去空
result[key] = element.trim && element.trim();
}
if (this.isFieldEmpty(result[key])) {
delete result[key];
}
}
}
return result;
}
return obj;
},
获取 url query 中的具体参数值
getUrlParam(paramName) {
// eslint-disable-next-line react-hooks/rules-of-hooks
const searchParams = new URLSearchParams(useLocation().search);
if (Array.isArray(paramName)) {
return paramName.map(i => {
const v = searchParams.get(i);
if (
v &&
`${v}`.toLocaleLowerCase() !== 'undefined' &&
`${v}`.toLocaleLowerCase() !== 'null'
) {
return v;
}
return '';
});
}
const v = searchParams.get(paramName);
if (
v &&
`${v}`.toLocaleLowerCase() !== 'undefined' &&
`${v}`.toLocaleLowerCase() !== 'null'
) {
return v;
}
return '';
},
js对象转换成url地址参数格式。
objectToQuery(...args) {
const obj = args[0];
const prefix = args[1];
if (typeof obj !== 'object') return '';
const attrs = Object.keys(obj);
return attrs.reduce((query, attr, index) => {
// 判断是否是第一层第一个循环
if (index === 0 && !prefix) query += '?';
if (typeof obj[attr] === 'object') {
const subPrefix = prefix ? `${prefix}[${attr}]` : attr;
query += this.objectToQuery(obj[attr], subPrefix);
} else if (prefix) {
query += `${prefix}[${attr}]=${obj[attr]}`;
} else {
query += `${attr}=${obj[attr]}`;
}
// 判断是否是第一层最后一个循环
if (index !== attrs.length - 1) query += '&';
return query;
}, '');
},
乘法函数,用来得到精确的乘法结果
// 乘法函数,用来得到精确的乘法结果
// 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
// 调用:accMul(arg1,arg2)
// 返回值:arg1乘以arg2的精确结果
accMul(arg1, arg2) {
let m = 0;
const s1 = arg1.toString();
const s2 = arg2.toString();
try {
m += s1.split('.')[1].length;
} catch (e) {
// console.log(e);
}
try {
m += s2.split('.')[1].length;
} catch (e) {
// console.log(e);
}
return (
(Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /
Math.pow(10, m)
);
},