LOADING

加载过慢请开启缓存 浏览器默认开启

常用数据处理方法(例如对象清空,浮点数计算等)

一、对象清空 resetData

/**
 * @description 对象清空
 * @param {object} valueObj  传入的要清空的对象
 * @return Object
 */
export const resetData = (valueObj: any) => {
    if (Object.prototype.toString.call(valueObj) === '[object Object]') {
        const keys = Object.keys(valueObj)
        const obj: { [name: string]: string | Array<any> | boolean | number } = {}
        keys.forEach(item => {
            obj[item] =
                Object.prototype.toString.call(valueObj[item]) === '[object Array]'
                    ? []
                    : typeof valueObj[item] === 'number'
                    ? 0
                    : typeof valueObj[item] === 'boolean'
                    ? false
                    : ''
        })
        Object.assign(valueObj, obj)
    } else {
        const keys = Object.keys(valueObj[0])
        const obj: { [name: string]: string | Array<any> | boolean | number } = {}
        keys.forEach(item => {
            obj[item] =
                Object.prototype.toString.call(valueObj[item]) === '[object Array]'
                    ? []
                    : typeof valueObj[item] === 'number'
                    ? 0
                    : typeof valueObj[item] === 'boolean'
                    ? false
                    : ''
        })
        Object.assign(valueObj[0], obj)
    }
}

二、js浮点数乘法处理

/**
 *  js浮点数乘法处理
 * @param {} arg1
 * @param {*} arg2
 */
export const accMul = (arg1: number, arg2?: number) => {
    return arg2 ? Number(Number(arg1 * 100).toFixed(arg2)) : Number(Number(arg1 * 100).toFixed(2))
}

三、js浮点数除法处理

/**
 * js 浮点数除法处理
 * @param {*} arg1
 * @param {*} arg2
 */
export const accDiv = (arg1: number, arg2?: number) => {
    return arg2 ? Number(Number(arg1 / 100).toFixed(arg2)) : Number(Number(arg1 / 100).toFixed(2))
}

四、数字转金额格式

/**
 * 数字转金额格式
 * @param num 要格式化的数字
 * @param decimals 保留位数
 */
export const numberToMoney = (num: number | BigNumber, decimals = 2, thousandsSep = ','): string => {
    if (isNaN(num as any)) {
        return ''
    }
    const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals) // 保留的位数一定是有限位数的正整数
    const sep = typeof thousandsSep === 'undefined' ? ',' : thousandsSep
    const s = new BigNumber(num).toString().replace(/,/g, '') // 字符串,将,变成'';
    const p = new BigNumber(s) // 解析一个字符串,并返回一个浮点数
    const n = p.isNaN() ? 1 : p
    const formatNum = n
        .toFixed(prec)
        .toString()
        .replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
            return $1 + sep
        })
    return num ? formatNum : ''
}

五、时间戳转日期格式

type dateFormats = 'y-M-d' | 'y-M-d H:m:s' | 'y年M月d日' | 'y年M月d日 H时i分'

/**
 * 时间戳转日期格式
 * @param timestape
 * @param time
 * @returns
 */
export const dateFormat = (timestape: number, formats: dateFormats = 'y-M-d H:m:s'): string => {
    if (!timestape) {
        return ''
    }
    // 补零
    const zero = (val: number): string | number => {
        return val < 10 ? `0${val}` : val
    }
    const myDate = new Date(timestape)
    const year = myDate.getFullYear()
    const month = zero(myDate.getMonth() + 1)
    const day = zero(myDate.getDate())
    const hour = zero(myDate.getHours())
    const minute = zero(myDate.getMinutes())
    const second = zero(myDate.getSeconds())
    // 替换 formats 中的内容
    const replaceDate = (match: string): string => {
        return (
            {
                y: year,
                M: month,
                d: day,
                H: hour,
                m: minute,
                s: second
            } as any
        )[match]
    }
    return formats.replace(/Y|M|d|H|m|s/gi, replaceDate)
}

六、数组去重

const uniqueArr = (arr) => [...new Set(arr)];

console.log(uniqueArr(["1","2","1","2","3","4"]));
// ['1', '2', '3', '4']

七、获取当前h5页面的url参数

一般是h5嵌套到其他如(app,小程序等),双方之前的交互时用到的,在main.ts中直接使用

/**
 * 获取 url 中的参数
 * @param { String } url 获取参数 url
 * @returns { Object } 返回 url 参数
 */
export const getQueryString = (url = '') => {
  const baseUrl = url || window.location.href;
  const _pa = baseUrl.substring(baseUrl.indexOf('?') + 1);
  const _arrS = _pa.split('&');
  const _rs: any = {};
  for (let i = 0; i < _arrS.length; i++) {
    const pos = _arrS[i].indexOf('=');
    if (pos === -1) {
      continue;
    }
    const key = _arrS[i].substring(0, pos);
    const value = decodeURIComponent(_arrS[i].substring(pos + 1));
    _rs[key] = value;
  }
  return _rs;
};

//例如 当前页面为https://www.google.com.hk/search?number=666&string=money
//import { getQueryString } from '这个方法存放的地方';

const {number,string}: any = getQueryString();
console.log(number,string);//666 money

七、从url获取参数并转为对象

和上面不同的时需传入一个url

const getParameters = URL => JSON.parse(`{"${decodeURI(URL.split("?")[1]).replace(/"/g, 
'\\"').replace(/&/g, '","').replace(/=/g, '":"')}"}`)

getParameters("https://www.google.com.hk/search?number=666&string=money");
// {number: '666', string: 'money'}

八、检查对象是否为空

检查对象是否为空,实际上并不那么简单,即使对象为空,每次检查对象是否等于 {} 也会返回 false

const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object;
isEmpty({}) // true 
isEmpty({a:"not empty"}) //false

九、文字复制到剪贴板

Clipboard API 它的所有操作都是异步的,返回 Promise 对象,不会造成页面卡顿。而且,它可以将任意内容(比如图片)放入剪贴板。

const copyText = async (text) => await navigator.clipboard.writeText(text)
copyText('单行代码 前端世界')