//2019-11-15
前端实用小工具
类型检测:
function type(target,type){
let targetType = Object.prototype.toString.call(target).toLowerCase().match(/\[object (\S*)\]/)[1];
return type === undefined ? targetType : targetType === type;
}
数字千分位分割:
function numberFormat (num,fixed) {
num = (num + '').split('.');
let reg=/\d{1,3}(?=(\d{3})+$)/g;
if(num[1] && type(fixed,'number')){
num[1] = num[1].substring(0,fixed);
}
return num[0].replace(reg, '$&,') + (num[1] ? '.' + num[1] : '');
}
十分位补零:
function zeroFill(n){
n = Number(n);
return n < 10 ? '0' + n : n;
}
url参数序列化:
function decode(str){
let decodeRE = /\+/g;
return decodeURIComponent(str.replace(decodeRE, " "))
};
function paramsFormat(query){
if(!query){ return null }
let re = /([^&=]+)=?([^&]*)/g;
let params = {}, e;
while ( e = re.exec(query) ) params[ decode(e[1]) ] = decode( e[2] );
return params;
};
加减乘除:
function mul(arg1, arg2) {
let m = 0,
s1 = arg1.toString(), s2 = arg2.toString();
try { m += s1.split(".")[1].length } catch (e) { }
try { m += s2.split(".")[1].length } catch (e) { }
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}
function div(arg1, arg2) {
let t1 = 0, t2 = 0, r1, r2;
try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
r1 = Number(arg1.toString().replace(".", ""))
r2 = Number(arg2.toString().replace(".", ""))
return (r1 / r2) * Math.pow(10, t2 - t1);
}
function add(arg1, arg2) {
let r1, r2, m, c;
try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
c = Math.abs(r1 - r2);
m = Math.pow(10, Math.max(r1, r2))
if (c > 0) {
let cm = Math.pow(10, c);
if (r1 > r2) {
arg1 = Number(arg1.toString().replace(".", ""));
arg2 = Number(arg2.toString().replace(".", "")) * cm;
}
else {
arg1 = Number(arg1.toString().replace(".", "")) * cm;
arg2 = Number(arg2.toString().replace(".", ""));
}
}
else {
arg1 = Number(arg1.toString().replace(".", ""));
arg2 = Number(arg2.toString().replace(".", ""));
}
return (arg1 + arg2) / m
}
function sub(arg1, arg2) {
let r1, r2, m, n;
try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
m = Math.pow(10, Math.max(r1, r2));
//last modify by deeka
//动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
样式名:
function getClassName(className,option){
className = className ? className.split(' ') : [];
if(!option){
return className.join(' ');
}
Object.keys(option).forEach(key => {
let index = className.indexOf(key);
if(option[key] && index < 0){
className.push(key);
}else if(!option[key] && index > -1){
className.splice(index,1);
}
});
//返回
return className.join(' ');
}
自定义hooks-样式名:
import {useMemo} from 'react';
export default function(className,intoClassName){
return useMemo(() => {
let result = [className ? className : ''];
//用户自定义样式名
if(intoClassName){
result.push(intoClassName);
}
return result.join(' ');
},[className,intoClassName]);
}