npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wti-frontend/wti-utils

v1.0.12

Published

一体化工具类

Downloads

98

Readme

网页版

https://www.yuque.com/huoyanjinghuayiqie/kb/qtkspezk50flghqv?singleDoc#

npm地址

https://www.npmjs.com/package/@wti-frontend/wti-utils

开发人员看

规范

  • src/utils 放需要导出的方法
  • src/lib 放内部使用的方法

依赖安装

  • npm install --global rollup
  • Node 版本至少为 18.0.0
  • npm install

开发

  • 使用 ES Module 语法开发
  • 已配置 lodash(https://www.lodashjs.com/).  使用 import { cloneDeep } from 'lodash-es';
  • npm run dev 启动开发 在test.js中调试

部署

  • npm run build 打包 npm上传index.min.js
  • npm publish 上传到npm

wti-utils 使用

安装

  • npm i @wti-frontend/wti-utils

使用

  • 全量引入
    import wtiUtils from '@wti-frontend/wti-utils';
    
    Vue.prototype.$wtiUtils = wtiUtils;
  • 部分引入
    import { merge , numberToChinese } from '@wti-frontend/wti-utils';

methods

version

| 名称 | 描述 | 类型 | | --- | --- | --- | | version | 版本号 | string |


 import { version } from '@wti-frontend/wti-utils';
 console.log(version); 	// 1.0.0

numberToChinese

numberToChinese(num,[options={ zeroPad : true, fractionDigits : 2, round : false, amountFloatHandle :false }])

/**
 * 数字转汉字
 * @params num {number|string}
 * @params options {object}
 * options : { <br>
 *   zeroPad : true, //是否补0  amountFloatHandle 为 true生效 <br>
 *   fractionDigits : 2, //保留位数,round为true也表示从四舍五入的位数  amountFloatHandle 为 true生效 <br>
 *   round : false //是否四舍五入 amountFloatHandle 为 true生效 <br>
 *   amountFloatHandle :false //是否对源num进行浮点操作(内部调用amountFloat) <br>
 * } <br>
 * @return {string|any}  chineseStr 转化后的金额汉字
 * @version v1.0.5
 * @example
 *
 *     numberToChinese(1212.51212), //壹仟贰佰壹拾贰元伍角壹分贰毫壹厘
 *     numberToChinese(1212.51212, {
 *         amountFloatHandle : true,
 *         fractionDigits : 2
 *     }), //壹仟贰佰壹拾贰元伍角壹分
 *     numberToChinese('0.00', {
 *         amountFloatHandle : true,
 *         fractionDigits : 3
 *     }), //零元整
 *     // 不合法的值 返回原值
 *     numberToChinese(''), //''
 *     numberToChinese(null), //null
 *     numberToChinese(undefined), //undefined
 *     numberToChinese([]) // []
 * */

~~moneyFormat~~ 废弃

moneyFormat(num , [digit = 2] , [isCut = false])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | moneyFormat | 金额格式化(千分符 + 补0) | function | | @params | num | {number|string|null(null视为0)} | | @params | digit 默认值2 表示补零几位 小数点后如果 0 位或者 1 位,那么自动补零到 2 位。 | string | | @params | isCut 默认值false 当小数位大于digit设定值时,是否对小数位进行额外的截取处理,默认不处理 | boolean | | @return | 格式化后的金额 | string |


import { moneyFormat } from '@wti-frontend/wti-utils';
console.log(
    moneyFormat(null), //null 0.00
    moneyFormat('10,000'), //10,000 不合法 直接返回原值
    moneyFormat('10w000'), //10w000 不合法 直接返回原值
    moneyFormat('10000'), //100,000.00
    moneyFormat(NaN), // NaN
    moneyFormat('NaN'), //'NaN'
    moneyFormat(121212334.1212), // 121,212,334.1212
    moneyFormat(121212334.1212 , 2 , true), // 121,212,334.12
    moneyFormat(121212334.1212 , 3 , true), // 121,212,334.121
    moneyFormat(121212334.1212 , 3 , false), // 121,212,334.1212
    moneyFormat(-100000), //-100,000.00
    moneyFormat(undefined), // undefined 不合法直接返回 num
    moneyFormat([1]) // [1] 不合法直接返回 num
)

cardPadingSpace

cardPadingSpace(value , [options={ defaultValue : '-', useDefaultValue : true, defaultValueMatch : [ undefined , null , '' ] }])

/**
 * 卡号加空格
 * @params value {number|string} 注意数字不要超过18位 js超过18位会显示科学计数法
 * @params options {object}
 * options : { <br>
 *   defaultValue : '-', //默认值 <br>
 *   useDefaultValue : true, // 是否使用默认值 <br>
 *   defaultValueMatch : [ undefined , null , '' ] , //合配置到这些(值)会使用默认值 <br>
 * } <br>
 * @return {string}  12345678->1234 5678 , 1234999-5678147 -> 1234 999-5678 147
 * @version v1.0.9
 * @example
 *
 *     cardPadingSpace('54815234184531'), //5481 5234 1845 31
 *     cardPadingSpace('5481-2341899-4531999') , //5481-2341 899-4531 999
 *     cardPadingSpace('5481-2341899') , //5481-2341 899
 *     cardPadingSpace(null), //-
 *     cardPadingSpace(null , {
 *         useDefaultValue : false
 *     }) ,//null //不使用默认值
 *     cardPadingSpace(null , {
 *         defaultValueMatch : ['']
 *     }) ,//null //修改了默认值的范围 null成为了不合法的值 返回原值
 * */
import { cardPadingSpace } from '@wti-frontend/wti-utils';
console.log(
    cardPadingSpace('54815234184531'), //5481 5234 1845 31
    cardPadingSpace('5481-2341899-4531999') , //5481-2341 899-4531 999
    cardPadingSpace('5481-2341899') , //5481-2341 899
    cardPadingSpace(null), //-
    cardPadingSpace(null , {
        useDefaultValue : false
    }) ,//null //不使用默认值
    cardPadingSpace(null , {
        defaultValueMatch : ['']
    }) ,//null //修改了默认值的范围 null成为了不合法的值 返回原值
)

stringReplaceStar

stringReplaceStar(value , [reserveStart = 4] , [reserveEnd=4])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | stringReplaceStar | 字符串替换为星号 | function | | @params | value  卡号 | string | | @params | reserveStart  默认4 保留前reserveStart位 | number | | @params | reserveEnd 默认4 保留后reserveEnd位 | number | | @return | 替换后的字符串 | string |


import { stringReplaceStar } from '@wti-frontend/wti-utils';
console.log(
    stringReplaceStar('1561245121212'), // 1561****1212
    stringReplaceStar('1561245121212' , 5 , 5), // 15612****21212
    stringReplaceStar('10000' , 5 , 5), // 10000
    stringReplaceStar('10000' , -1 , 5), // Error: reserveStart参数 必须为0或正整数
    stringReplaceStar('10000' , 1 , -1), // Error: reserveEnd参数 必须为0或正整数
    stringReplaceStar('10000' , 1 , 0), // 1****
    stringReplaceStar('10000' , 0 , 1), // ****0
    stringReplaceStar('10000' , 1 , 1), // 1****0
    stringReplaceStar('10000' , 0 , 0), // ****
    stringReplaceStar(10000), // 10000 不合法 直接返回
)

multiply

multiply(num1 , num2)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | multiply | 两个数字做乘法 | function | | @params | num1 | number | | @params | num2 | number | | @return | 乘后的数 | number |


import { multiply } from '@wti-frontend/wti-utils';
console.log(
    multiply(1 , 2), //2
    multiply(2 , 0), //0
    multiply(null , undefined), //NaN
    multiply(1.112 , 2.12121), //2.35878552
    multiply(-1.112 , 2.12121), //-2.35878552
    multiply(-1.112 , -2.12121), //2.35878552
    multiply(1.112 , -2.12121) //-2.35878552
)

divid

divid(num1 , num2)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | divid | 两个数字做除法 | function | | @params | num1 | number | | @params | num2 | number | | @return | 除后的数 | number |


import { divid } from '@wti-frontend/wti-utils';
console.log(
    divid(1 , 2), //0.5
    divid(2 , 0), //Infinity
    divid(2 , undefined), //NaN
    divid(2 , 1), //2
    divid(-2 , 1), //-2
    divid(-1, -2), //0.5
    divid(2 , -1), //-2
    divid(2.121212 , -2.1) //-1.0101009523809523
)

add

add([nums])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | add | 数字相加 | function | | @params | [nums] | ...number | | @return | 加后的数 | number |


import { add } from '@wti-frontend/wti-utils';
console.log(add(1 , 2 , 3)); // 6

isDef

isDef(value)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | isDef | 判断非空 (非undefined & 非null) | function | | @params | value | any | | @return | true|false | boolean |


import { isDef } from '@wti-frontend/wti-utils';
console.log(
    isDef(undefined), //false
    isDef(null), //false
    isDef(2), //true
    isDef(''), //true
    isDef({}), //true
    isDef([]), //true
)

isEmpty

isEmpty(value)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | isEmpty | 判断是否为空  包含(undefined | null | '')为空 | function | | @params | value | any | | @return | true|false | boolean |


import { isEmpty } from '@wti-frontend/wti-utils';
console.log(
    isEmpty(undefined), //true
    isEmpty(null), //true
    isEmpty(2), //false
    isEmpty(''), //true
    isEmpty({}), //false
    isEmpty([]), //false
)

~~deepClone~~ 废弃

deepClone(value)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | deepClone | 深拷贝 | function | | @params | value | any | | @return | 拷贝后的value | any |


import { deepClone } from '@wti-frontend/wti-utils';
const oldSet = new Set([1]);
const newSet = deepClone(oldSet);
oldSet.add(2);
console.log(oldSet); //Set(2) {1, 2}
console.log(newSet); //Set(1) {1}

const oldObj = {
    a : 1 ,
    b:()=>{
        return 'b'
    }
};
const newObj = deepClone(oldObj);
oldObj.a = 2
oldObj.b = null;
console.log(oldObj.a); //2
console.log(newObj.a); //1
console.log(newObj.b()); //b


console.log(deepClone(undefined)); //undefined
console.log(deepClone(null)); //null

merge

merge(target , [sources])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | merge | 合并(浅拷贝 , 整体参考Object.assign) | function | | @params | target 目标对象 {非undefined || 非null} | !undefined & !null | | @params | [sources] | ...object | | @return | 合并后的 | any |


import { merge } from '@wti-frontend/wti-utils';

//(浅拷贝 , 会改变目标对象)整体参考Object.assign 不一样的地方是当{a : undefined} a为undefined 会跳过
console.log(merge({a : 1} ,{a : 2},  {a : undefined})); // {a: 2}


const oldObj = {b : 2};
merge(oldObj , {b : 1});
console.log(oldObj); //{b: 1}


const oldObj1 = {b : {c : 3}};
const newObj = merge({a : 1} , oldObj1);
newObj.b.c = 4;
console.log(oldObj1.b.c); // 4
console.log(newObj.b.c); // 4



const oldObj2 = {b : 1};
const newObj2 = merge({b : {c : 3}} , oldObj2);
console.log(oldObj2.b); //1
console.log(newObj2.b); // 1

const oldObj3 = [1 , 2];
const newObj3 = merge([3 , 4] , oldObj3);
console.log(newObj3); //[1 , 2]

validate

| 名称 | 描述 | 类型 | 返回值 | | --- | --- | --- | --- | | validate | 校验对象 | object | | | validate.positiveCheck | 正数校验 | function | function | | validate.numberSizeCheck | 数字大小校验 | function | function | | validate.wtiFormRateCheck | wtiform利率校验 | function | function | | validate.nonNegativeNumberCheck | 非负数校验 | function | function | | validate.wtiFormMoneyLengthCheck | wtiform金额长度校验 (万元,元) | function | function |

validate.positiveCheck

validate.positiveCheck()

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | numberSizeCheck | 正数校验 | function | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate } from '@wti-frontend/wti-utils';
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="金额校验" prop="money">\n' +
        '    <el-input v-model="form.money"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            money : ''
        },
        rules : {
            money : [
                // 正数校验
                { validator: validate.positiveCheck() , trigger: [ 'blur' , 'change' ] }
            ]
        }
    }
});

validate.numberSizeCheck

validate.numberSizeCheck([{max,min}])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | numberSizeCheck | 数字大小校验 | function | | @params | {max,min}max,mix为最大和最小值有则校验没有则不校验 | object | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate } from './index.js';
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="金额校验" prop="money">\n' +
        '    <el-input v-model="form.money"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            money : ''
        },
        rules : {
            money : [
                //数字大小校验
                //最小值为1
                { validator: validate.numberSizeCheck({min : 1}) , trigger: [ 'blur' , 'change' ] },
                //最大值为5
                { validator: validate.numberSizeCheck({max : 5}) , trigger: [ 'blur' , 'change' ] },
                //最小值为1 , 最大值为5
                { validator: validate.numberSizeCheck({min : 1 , max : 5}) , trigger: [ 'blur' , 'change' ] },
                // 不校验
                { validator: validate.numberSizeCheck() , trigger: [ 'blur' , 'change' ] },
            ]
        }
    }
});

validate.wtiFormRateCheck

validate.wtiFormRateCheck()

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | wtiFormRateCheck | wtiform利率校验(前6后8) wtiForm输入的百分比会除100返回数值,如:10%,得到的值会是:0.1 | function | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate,divid } from '@wti-frontend/wti-utils';
const wtiFormRateCheck = validate.wtiFormRateCheck();
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="利率" prop="rate">\n' +
        '    <el-input v-model="form.rate"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            rate : ''
        },
        rules : {
            rate : [
                //利率校验
                {
                    validator:(rule, value, callback)=>{
                        //这里模拟一下wti-form 利率value会除100
                        wtiFormRateCheck(rule, divid(value , 100), callback);
                    } ,
                    trigger: [ 'blur' , 'change' ]
                },
            ]
        }
    }
});

validate.nonNegativeNumberCheck

validate.nonNegativeNumberCheck()

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | wtiFormRateCheck | 非负数校验 | function | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate } from '@wti-frontend/wti-utils';
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="金额校验" prop="money">\n' +
        '    <el-input v-model="form.money"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            money : ''
        },
        rules : {
            money : [
                // 正数校验
                { validator: validate.nonNegativeNumberCheck() , trigger: [ 'blur' , 'change' ] }
            ]
        }
    }
});

validate.wtiFormMoneyLengthCheck

validate.wtiFormMoneyLengthCheck([type])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | wtiFormMoneyLengthCheck | wtiform金额长度校验 (元 前12后2  万元前8后6)  wtiForm输入的万元会乘10000 输入1 会得到 10000 | function | | @params | type 为wan 时校验万元 非wan则校验元 | string | undefined | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate,multiply } from '@wti-frontend/wti-utils';
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="利率" prop="money">\n' +
        '    <el-input v-model="form.money"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            money : ''
        },
        rules : {
            money : [
                //金额校验(万元)
                {
                    validator:(rule, value, callback)=>{
                        const wtiFormMoneyLengthCheck = validate.wtiFormMoneyLengthCheck('wan');
                        //这里模拟一下wti-form 万元value会乘10000
                        wtiFormMoneyLengthCheck(rule, multiply(value , 10000), callback);
                    } ,
                    trigger: [ 'blur' , 'change' ]
                },
                //金额校验(元)
                {
                    validator:validate.wtiFormMoneyLengthCheck(),
                    trigger: [ 'blur' , 'change' ]
                },
            ]
        }
    }
});

validate.idCardCheck

validate.idCardCheck()

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | idCardCheck | 身份证校验 | function | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate } from '@wti-frontend/wti-utils';
new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="身份证" prop="idcard">\n' +
        '    <el-input v-model="form.idcard"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            idcard : ''
        },
        rules : {
            idcard : [
                // 正数校验
                { validator: validate.idCardCheck() , trigger: [ 'blur' , 'change' ] }
            ]
        }
    }
});

validate.enterpriseCodeCheck

validate.enterpriseCodeCheck()

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | enterpriseCodeCheck | 企业统一信用代码验证 | function | | @return | function | function |

// 开发人员直接copy代码到test.js 就可以使用 '@wti-frontend/wti-utils' 改为 './index.js'
import { validate } from '@wti-frontend/wti-utils';

new Vue({
    el : '#app',
    template :
        '<el-form ref="form" :model="form" :rules="rules" label-width="80px">\n' +
        '  <el-form-item label="企业统一信用代码" prop="code">\n' +
        '    <el-input v-model="form.code"></el-input>\n' +
        '  </el-form-item>\n' +
        '</el-form>',
    data: {
        form : {
            code : ''
        },
        rules : {
            code : [
                // 正数校验
                { validator: validate.enterpriseCodeCheck() , trigger: [ 'blur' , 'change' ] }
            ]
        }
    }
});

validate.integerCheck

validate.integerCheck()

/**
 * 整数校验
 * @return function
 * @version v1.0.7
 * @example
 *     validate.integerCheck(), //校验是否整数
 * */

validate.numberDigitCheck

validate.numberDigitCheck([integerDigit='*'] , [decimalDigit='2'],[customErrMsg=undefined])

/**
 * 数字长度校验 <br>
 * @param [integerDigit] {string | number} 整数位  默认*{>=1的整数|'*'} <br>
 * @param [decimalDigit] {string | number} 小数位 默认2{>=0的整数|'*'} <br>
 * @param [customErrMsg] {string} 自定义错误提示 <br>
 * @return function
 * @version v1.0.7
 * @example
 *
 *     validate.numberDigitCheck('*' , 2), //不校验整数,校验小数后2位
 *     validate.numberDigitCheck('*' ,'*'), //不校验位数
 *     validate.numberDigitCheck(2 , '*'), //只校验整数2位 , 不校验小数位
 *     validate.numberDigitCheck(12 , 2), //校验整数12位 , 小数2位
 * */

timeFormat

timeFormat([dateTime=''] , [format='yyyy-mm-dd'])

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | timeFormat | 时间格式化 | function | | @params | dateTime 日期时间 | {''|undefined|null|Date|Number} | | @params | format 格式化的替换规则 'yyyy-mm-dd hh:MM:ss' y = 年 m = 月 d = 日 h = 时 M = 分 s = 秒 | {string} | | @return | 格式化后的 | {string} |


import { timeFormat } from '@wti-frontend/wti-utils';
console.log(
    timeFormat(), //2024-03-11 当前时间
    timeFormat(new Date(15656218512121) , 'yyyy-mm-dd hh:MM:ss'), //2466-02-15 13:35:12
    timeFormat('', 'yyyy-mm-dd hh:MM:ss'), //2024-03-11 16:36:05 当前时间
    timeFormat(undefined, 'yyyy-mm-dd hh:MM:ss'), //2024-03-11 16:36:05 当前时间
    timeFormat(null , 'yyyy-mm-dd hh:MM:ss'), //2024-03-11 16:36:05 当前时间
    timeFormat(15656218512121 , 'yyyy-mm-dd hh:MM:ss'), // 2466-02-15 13:35:12
    timeFormat(1 , 'yyyy-mm-dd hh:MM:ss'), // 1970-01-01 08:00:00
    timeFormat('' , 'yyyy//mm$/dd hh++MM*ss'), // 2024//03$/11 16++44*23
    //当匹配到的位数大于1时且当前时间小于位数,会在前面自动补0
    timeFormat('' , 'y-m-dd'), // 2024-3-11
    timeFormat('' , 'yyyyy-mm-ddd'), // 02024-03-011
    // 不合法的情况
    timeFormat({} , 'yyyy-mm-dd'), // 不合法返回原值 {}
    timeFormat('111' , 'yyyy-mm-dd'), // 不合法返回原值 '111'
);

hasOwn

hasOwn(target,key)

| 名称 | 描述/参数 | 类型 | | --- | --- | --- | | hasOwn | 是否存在某个key(不含原型链) | function | | @params | target | {object} | | @params | key | {string} | | @return | | {boolean} |

import {hasOwn} from '@wti-frontend/wti-utils';
const obj = {
    a : 1,
    b : 2
}
console.log(
    hasOwn(obj , 'a'), //true
    hasOwn(obj , 1),//false
    hasOwn(obj , []),//false
    hasOwn([] , 'length'), //true
    hasOwn([] , '0'), //false
    hasOwn(undefined , '0') //会报错
)

amountFloat

amountFloat(amount,[options={ zeroPad : true, fractionDigits : 2, round : false }])

/**
 * 金额转化为浮点数
 * @params amount {string|number}
 * @params options {object}
 * options : { <br>
 *   zeroPad : true, //是否补0 <br>
 *   fractionDigits : 2, //保留位数,round为true也表示从四舍五入的位数 <br>
 *   round : false //是否四舍五入 <br>
 * } <br>
 * @return string 金额
 * @version v1.0.5
 * @example
 *
 *     amountFloat(1.799), // 1.79
 *     amountFloat(1.799 , {
 *         round : true,
 *         fractionDigits : 2,
 *         zeroPad : false
 *     }), // 1.8
 *     amountFloat(1.799 , {
 *         round : true,
 *         fractionDigits : 2,
 *         zeroPad : true
 *     }), // 1.80
 *     amountFloat(1.799 , {
 *         round : false,
 *         fractionDigits : 3,
 *     }), // 1.799
 *     amountFloat(1.7999999 , {
 *         fractionDigits : undefined,
 *     }), // 1.7999999  //不对小数做截取amountFormat , numberToChinese的options 同理
 *     // 不合法的值 返回原值
 *     // amountFloat , amountFloat ,numberToChinese 校验数字合法为同一套逻辑
 *     amountFloat(''), //''
 *     amountFloat(null), //null
 *     amountFloat(undefined), //undefined
 *     amountFloat([]) // []
 */

amountFormat

amountFormat(amount,[options={ zeroPad : true, fractionDigits : 2, round : false }])

/**
* 金额格式化(千分符 + 补0)
* @params amount {number|string}
* @params options {object}
* options : { <br>
*   zeroPad : true, //是否补0 <br>
*   fractionDigits : 2, //保留位数,round为true也表示从四舍五入的位数 <br>
*   round : false //是否四舍五入 <br>
* } <br>
* @return {string} 格式化后的金额 100000->100,00.00
* @version v1.0.5
 * @example
 *
 *     amountFormat(123456789), //123,456,789.00
 *     amountFormat(-123456789), //-123,456,789.00
 *     amountFormat(123456789 , {
 *         zeroPad : false
 *     }), // 123,456,789
 *     amountFormat(1234.15647 , {
 *         fractionDigits : 4
 *     }), //1,234.1564
 *     amountFormat('1234.15647' , {
 *         fractionDigits : 2,
 *         round : true,
 *     })// 1,234.16
 *      // 不合法的值 返回原值
 *     amountFormat(''), //''
 *     amountFormat(null), //null
 *     amountFormat(undefined), //undefined
 *     amountFormat([]) // []
* */

getTargetType

getTargetType(target)

/**
* 获取目前对象的类型
* @params target {any}
* @return {string} 类型
* @version v1.0.5
 * @example
 *
 *     getTargetType({}), //object
 *     getTargetType([]), //array
 *     getTargetType(null), //null
* */

mapUtils

mapUtils(functionNameMap)

/**
 * 映射辅助函数mapUtils <br>
 * @param functionNameMap {array | object} ['functionName'] | {'自定义属性' : 'functionName'} | {'自定义属性' : {name : string , [handler] : function , [ctx] : any} <br>
 * @return {object} <br>
 * @version v1.0.8
 * @example
 *     // ['functionName']
 *     mapUtils([ 'hasOwn' , 'getTargetType' ]) // {hasOwn : f , getTargetType : f}
 *
 *     // {'自定义属性' : 'functionName'}
 *     mapUtils({
 *         'myHasOwn' : 'hasOwn'
 *     }), // {myHasOwn : f=>hasOwn}
 *
 *    //进阶
 *    //{'自定义属性' : {name : string , [handler] : function , [ctx] : any}
 *     mapUtils({
 *         'myHasOwn' : {
 *             name : 'hasOwn',  //函数名
 *             handler(fn , ...res),  //自定义函数  fn:为name匹配到的函数 ...res 为参数 ,不填等价于 {myHasOwn :hasOwn} 勿使用箭头函数会导致this失效
 *             ctx : {}   //执行环境  // handler有效时生效 不填为默认的执行环境  vue methods中 因为vue会自己bind一次 所以handler中 this为 vue
 *         }
 *     }), // {myHasOwn : f=>hasOwn}
 *
 *     mapUtils.functionNames(), //返回支持的所有functionName集合
 * */
import { mapUtils } from '@wti-frontend/wti-utils';
//一
// ['functionName']
new Vue({
    el : '#app',
    template :
        '<div>{{ isDef(0) }} {{add(1 , 2)}}</div>',
    methods:{
        ...mapUtils(['isDef' , 'add'])
    }
});

//二
// {'自定义属性' : 'functionName'}
new Vue({
    el : '#app',
    template :
        '<div>{{ cusIsDef(0) }} {{cusAdd(1 , 2)}}</div>',
    methods:{
        ...mapUtils({
            cusIsDef : 'isDef',
            cusAdd : 'add'
        })
    }
});

//三 
//{'自定义属性' : {name : string , [handler] : function , [ctx] : any}
new Vue({
    el : '#app',
    template :
        '<div>{{ cusIsDef(0) }} {{cusAdd(1 , 2)}}</div>',
    methods:{
        ...mapUtils({  //无handler
            cusIsDef : {
                name : 'isDef'
            },
            cusAdd : {
                name : 'add'
            },
        })
    }
});

//四  进阶用法
//{'自定义属性' : {name : string , [handler] : function , [ctx] : any}
//name : 'hasOwn',  //函数名
//handler(fn , ...res),  //自定义函数  fn:为name匹配到的函数 ...res 为参数 ,不填等价于 {myHasOwn :hasOwn} 勿使用箭头函数会导致this失效
//ctx : {}   //执行环境  // handler有效时生效 不填为默认的执行环境  vue methods中 因为vue会自己bind一次 所以handler中 this为 vue
new Vue({
    el : '#app',
    template :
        '<div>{{ cusIsDef(0) }} {{cusAdd()}} {{cusMoneyFormat()}}</div>',
    data (){
      return{
          nums : [1 , 2 , 3]
      }
    },
    methods:{
        ...mapUtils({
            cusIsDef : {
                name : 'isDef',
                handler : (fn , value)=>{ // fn为 isDef 固定在第一位
                    return fn(value) //等价于 isDef(value)
                }
            },
            cusAdd : {
                name : 'add',
                handler(fn){
                    console.log('this' , this)  //指向vue  vue methods中 因为vue会自己bind一次 所以handler中 this为 vue
                    return fn(...this.nums) // 有handler 无ctx 时 , 指向vue 勿使用箭头函数会导致this失效
                }
            },
            cusMoneyFormat : {
                name : 'moneyFormat',
                handler(fn){
                    console.log('this' , this)// 此时this指向ctx
                    return fn(this.money)
                },
                ctx : { //执行环境
                    money : '100000'
                }
            },
        })
    }
});


//五 获取支持的functionName
console.log(mapUtils.functionNames())