前端实用小工具

192 阅读1分钟

//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]);
}