# js-methods-library.js  
## Getting Started
### install
    npm install js-methods-library
### using  
#### useing `vue-cli`  
import Tools from 'js-methods-library'  
Vue.use(Tools)  
this.***()  
#### useing `other`
    <script src="js-methods-library/tools.js"></script>  
    <script>
        Tools.***()
    </script>
## Library && Example
### 浏览器地址栏解析
***
#### 获取当前地址栏参数，防止 xss 攻击
>地址栏地址："http://www.xxx.com/index.html?param1=aaa";  
> @example this.getQueryString('param1')  
> @param argument[0] {String} - 参数名  
> @returns {String} - 参数值
***
#### 获取字符串参数，防止 xss 攻击
>地址栏地址："http://www.xxx.com/index.html?param1=aaa";  
> @example this.getQueryString("http://www.xxx.com/index.html?param1=aaa",'param1')  
> @param argument[0] {String} - url地址  
> @param argument[1] {String} - 参数名  
> @returns {String} - 参数值
***
#### 获取地址栏#后面的值
>地址栏地址："http://www.123.com/index.html#bbb";  
> @example this.getRequestString()  
> @param 无须参数  
> @returns {String} - 参数值 - bbb
***
#### 获取 url 的 htm 页面名称
>地址栏地址："http://www.123.com/index.html";  
> @example this.getUrlHtml(1)  
> @param argument[0] {number} - 获取类型;  
> 1，只获取页面名称，不带 suffix 后缀；  
> 2，取页面名称，同时带 suffix 后缀；  
> 3，获取 suffix 父级路径与 suffix 名称，同时带 suffix 后缀；  
> 4，获取 suffix 父级路径与 suffix 名称，不带 suffix 后缀；  
> undefined，type 没有值，什么也不传，获取 suffix 父级路径与当前 suffix 页面名称，不带 suffix 后缀  
> @param argument[1] {String} - 页面后缀，默认值'html'  
> @returns {String} - 参数值
***
#### 编码地址
>@example this.linkEncodeURI(url)  
> @param argument[0] {String} - 页面地址  
> @returns {String} - 编码后的页面地址
***
#### 解码地址
>@example this.linkDecodeURI(url)  
> @param argument[0] {String} - 页面地址  
> @returns {String} - 解码后的页面地址
***

### 浏览器跳转  
#### 页面跳转  
>@example this.forward(url)
> this.forward('http://www.xxx.com/index.html', {a:1,b:2});  
> this.forward('http://www.xxx.com/index.html', {a:1,b:2}, parent.location);  
> @param argument[0] {String} - 跳转地址(必传)  
> @param argument[1] {Object} - 附带参数(非必传)  
> @param argument[2] {Object} - 跳转形式(非必传) - 当前页面（location）或者（parent.location）
***  
#### 打开窗口
>@example this.openWindow(url)
> this.openWindow('http://www.xxx.com/index.html', {a:1,b:2});  
> this.openWindow('http://www.xxx.com/index.html', {a:1,b:2}, );  
> @param argument[0] {String} - 跳转地址(必传)  
> @param argument[1] {Object} - 附带参数(非必传)  
> @param argument[2] {String} - 窗口打开位置(非必传)
***

### 日期时间操作    
#### 日期格式化（日期对象）  
>  
> @example this.formatDate('2020/12/12 10:10:30','yyyy-MM-dd HH');  
> 2020-12-12 10  
> @param argument[0] {String} date - 日期对象  
> @param argument[1] {String} [fmt='yyyy-MM-dd'] - 格式化格式  
> @returns {String} - 格式化后日期  
***  
#### 日期格式化（yyyy-MM-dd HH:mm:ss 格式的日期）  
> @example this.getFormatDate('2020-12-12 10:10:30','yyyy-MM-dd HH');  
> 2020-12-12 10  
> @param argument[0] {String} date - 日期对象  
> @param argument[1] {String} [fmt='yyyy-MM-dd'] - 格式化格式  
> @returns {String} - 格式化后日期
***  
#### 获取当前日期并格式化  
> @example this.getFormatDateNow();  
> 2020-12-12  
> @param argument[0] 无参数  
> @returns {String} - 格式化后日期
***  
#### 比较当前时间与指定时间相差几个月
> @example this.checkFormatDateToFuture('2020-12-12',3);   
> @param argument[0] {String} date - 日期对象  
> @param argument[1] {String} - 相差月数  
> @returns {Boolean} - true为小于num个月，false为大于num个月
***  
#### 生成唯一ID，时间戳加随机数  
> @example this.uid();   
> @param argument[0] 无参数  
> @returns {number} - 唯一ID
***
### 字符串、数组操作  
#### 判断是否为空  
> @example this.isEmpty(‘’);  
> 判断undefined、null、""  
> @param argument[0] {String} obj - 参数名称  
> @returns {Boolean} - 参数值
***  
#### 判断对象是否为空
> @example this.isObjEmpty(obj);  
> 判断对象是否不含任何属性  
> @param argument[0] {Obj} obj - 参数名称  
> @returns {Boolean} - 参数值
***  
#### 判断是否是json字符串
> @example this.isJsonString("{a1:1}");  
> true
> @param argument[0] {String} - 字符串  
> @returns {Boolean} - 参数值
***  
#### 当两个对象有相同的key时，快速赋值
> @example this.objToValueObj("{a:1,b:2,d:5}","{a:2,b:3,c:4}");  
> obj1: {a:2,b:3,d:5}
> @param argument[0] {Object} obj1 - 被赋值对象  
> @param argument[1] {Object} obj2 - 赋值对象  
***   
#### 将字符串拆分成数组
> @example this.split('1,2,3',',');   
> [1,2,3,4]  
> @param argument[0] {String} str - 字符串  
> @param argument[1] {String} [separator=','] - 分隔符（非必传）  
> @returns {Array} - 数组
***  
#### 将数组拼装成字符串
> @example this.join([{k1:'1','k2:'张三'}，{k1:'2','k2:'李四'}，{k1:'3','k2:'王五'}],',','k2');   
> '张三,李四,王五'   
> this.join([{k1:'1','k2:'张三'}，{k1:'2','k2:'李四'}，{k1:'3','k2:'王五'}],',','k1');  
> '1,2,3'  
> this.join(["1","2","3"])  
> '1,2,3'  
> @param argument[0] {Array} - 数组  
> @param {String} key - 作为分隔的 key，当分隔key存在时，separator必传  
> @param argument[1] {String} [separator=','] - 分隔符（非必传）  
> @returns {String} - 字符串
***  
#### 字符串模糊匹配
> @example this.stringMatching("1,2,3,4", "2");  
> true
> @param argument[0] {String} string - 字符串  
> @param argument[1] {String} keyWord - 关键词  
> @returns {Boolean} - 参数值
***  
#### 将数组中某些元素重组成新的数组
> @example this.joinKey([{k1:'1','k2:'张三'}，{k1:'2','k2:'李四'}，{k1:'3','k2:'王五'}], 'k2');  
> ['张三', '李四', '王五']
> @param argument[0] {Array} Array - 数组  
> @param argument[1] {String} key - 关键词  
> @returns {Array} - 新的数组
***  
#### 数组深拷贝
> @example this.copyToDeep([{k1:'1','k2:'张三'}，{k1:'2','k2:'李四'}，{k1:'3','k2:'王五'}]);
> @param argument[0] {Array} Array - 数组  
> @returns {Array} - 结果数组
***  
#### 两数组取交集
> @example this.getArrayMixed([1,2,3], [2,3,4]);   
> [2,3]  
> @param argument[0] {Array} Array - 数组  
> @param argument[1] {Array} Array - 数组  
> @returns {Array} - 结果数组
*** 
#### 利用 map 进行数组去重
> @example this.arrayDeDuplication(arr);   
> let arr = [1, 0, 8, 3, -9, 1, 0, -9, 7];  
> 1, 0, 8, 3, -9, 7  
> @param argument[0] {Array} Array - 数组  
> @returns {Array} - 结果数组
*** 
#### 取出数组中，某个属性相同的项组成新的集合
> @example  
> arr = [{a:1,b:2,c:3},{a:1,b:3,c:4},{a:2,b:4,c:6}]  
> this.getArrayMajority(arr, 'a', 1);   
> [{a:1,b:2,c:3},{a:1,b:3,c:4},]  
> @param argument[0] {Array} Array - 数组  
> @param argument[1] {String} key - 属性名    
> @param argument[2] {String} value - 属性值    
> @returns {Array} - 结果数组
***  
#### 替换指定位置的字符串
> @example this.setCharAt(str, index, chr);   
> @param argument[0] {String} str - 源字符串  
> @param argument[1] {String} index - 索引  
> @param argument[2] {String} chr - 替换字符  
> @returns {string} - 替换后的字符串
*** 
#### 回文字符串判断
> @example this.isPlalindrome('ababbaba');  
> true  
> @param argument[0] {String} str - 源字符串  
> @returns {Boolean} - 参数值
*** 

### 文件上传与转码  
#### 获取图片路径方法
> @example this.getObjectURL(file);   
> @param argument[0] {Object} file - 图片文件对象  
> @returns {string} - 图片文件路径
***  
#### 获取formData对象
> @example this.getFormData('formName字符串');  
> @param argument[0] {string} [form] - form选择器  
> @returns {Object} - formData对象
*** 
#### base64转换blob
> @example this.convertBlob('base64字符串');  
> @param argument[0] {string} base64 - base64  
> @returns {Object} - Blob
*** 
#### 获取文件后缀名大小（KB）
> @example this.fileSize(2048);  
> @param argument[0] {number} size - 文件大小（BIT）  
> @returns {number} - size
*** 
#### 获取文件后缀名
> @example this.fileSuffix(‘a.png’);  
> @param argument[0] {string} fileName - 文件名称  
> @returns {string} - 文件后缀名
*** 
#### 获取文件类型
> @example this.fileSuffixType(‘.png’);  
> @param argument[0] {string} fileSuffix - 文件后缀名  
> @returns {string} - 文件类型
*** 
#### 获取文件类型（根据文件名称）
> @example this.fileType(‘a.png’);  
> @param argument[0] {string} fileName - 文件名称  
> @returns {string} - 文件类型
*** 
### 本地存储  
#### 设置 localStorage
> @example this.setLocal("myLocal","myLocalVal");  
> @param argument[0] {string} name - 名称  
> @param argument[1] {object} content - 值  
> @returns 
*** 
#### 获取 localStorage
> @example this.getLocal("myLocal");  
> @param argument[0] {string} name - 名称  
> @returns {object} content - 值
*** 
#### 删除 localStorage
> @example this.removeLocal("myLocal");  
> @param argument[0] {string} name - 名称  
> @returns 
*** 
#### 设置 sessionStorage
> @example this.setSession("mySession","mySessionVal");  
> @param argument[0] {string} name - 名称  
> @param argument[1] {object} content - 值  
> @returns
*** 
#### 获取 sessionStorage
> @example this.getSession("mySession");  
> @param argument[0] {string} name - 名称  
> @returns {object} content - 值
*** 
#### 删除 sessionStorage
> @example this.removeSession("mySession");  
> @param argument[0] {string} name - 名称  
> @returns
*** 
### 判断浏览器环境  
### 数据结构转换  
#### json格式转树状结构(最大支持三级)
> @example this.transData(data,'id','pid','children');  
> var data = [{id:1,pid:''},{id:1,pid:''},{id:1,pid:''},{id:11,pid:1},{id:12,pid:1},{id:2,pid:''},{id:21,pid:2}];  
> {"treeDatas":[{"id":1,"pid":"","level":1},{"id":1,"pid":"","children":[{"id":12,"pid":1,"level":2},{"id":11,"pid":1,"level":2},{"id":12,"pid":1,"level":2}],"level":1},{"id":2,"pid":"","children":[{"id":21,"pid":2,"level":2},{"id":21,"pid":2,"level":2}],"level":1}],"treeList":[{"id":1,"pid":"","level":1},{"id":1,"pid":"","level":1},{"id":1,"pid":"","children":[{"id":11,"pid":1,"level":2},{"id":12,"pid":1,"level":2},{"id":11,"pid":1,"level":2},{"id":12,"pid":1,"level":2}],"level":1},{"id":11,"pid":1,"level":2},{"id":12,"pid":1,"level":2},{"id":11,"pid":1,"level":2},{"id":12,"pid":1,"level":2},{"id":2,"pid":"","children":[{"id":21,"pid":2,"level":2},{"id":21,"pid":2,"level":2}],"level":1},{"id":21,"pid":2,"level":2},{"id":21,"pid":2,"level":2}]}
> @param argument[0] {Object} data - json数据  
> @param argument[1] {object} idStr - id的字符串  
> @param argument[2] {object} pidStr - 父id的字符串  
> @param argument[3] {object} childrenStr - children的字符串  
> @returns {Object} 树形数据
*** 
#### 修改数组对象的key
> @example this.modifyArrayFeild(Arrydata, keymap);  
> var Arrydata = [{name:'Lily',age:18},{name:'BKqq',age:22}];var keymap = {name:'label', age: 'value'}  
> @param argument[0] {array} arrayData - 目标数组  
> @param argument[1] {object} modifyObj - 需要修改的key与原始的kay组成的对象  
> @returns {array} 修改后的数组
*** 
#### 根据树形结构反查整个家族
> @example this.getFamilyTree(arr, pid, idStr, pIdStr);  
> @param {array} arr - 数据  
> @param {string|number} pid - 待查找的值  
> @param {string} idStr - id  
> @param {string} pIdStr - 父 id
> @returns {array} 
*** 
#### 对象赋值处理，防止污染对象
> @example this.dto2entity(dto, entity);  
> {a: 0, b: 1, d: ""}  
> var dto = {a: 0, b: 1, c: 'hahaha'}  
> var en = {a: '', b: '', d: ''}  
> this.dto2entity(dto, en)  
> console.log(en)
> @param {Object} dto - 源对象  
> @param {Object} entity - 目标对象  
> @returns {array}
*** 
### 排序方法  
#### 用途：sort 排序参数处理-降序
> @example this.getDesc('id');  
> var arr = [{id:2},{id:1},{id:3}];  
> // [{id:1},{id:2},{id:3}]   
> arr.sort(this.getDesc('id'))  
> @param {string} prop - 排序的参数  
> @returns {array}
*** 
#### 生成[n,m]的随机整数
> @example this.getDescDate('id');  
> @param argument[0] {number} minNum  
> @param argument[1] {number} maxNum  
> @returns 
*** 