工具函数 业务 javascript
Array
从数组中删除重复的项
const removeDuplicatedValues = array => […new Set(array)];let arr = removeDuplicatedValues([5, 3, 2, 5, 6, 1, 1, 6]); // [5, 3, 2, 6, 1]
检查所有项是否相等
const areAllEqual = array => array.every(item => item === array[0]);let check1 = areAllEqual([3, 5, 2]); // falselet check2 = allEqual([3, 3, 3]); // true
数组对象去重
function unique(arr,u_key) {let map = new Map()arr.forEach((item,index)=>{if (!map.has(item[u_key])){map.set(item[u_key],item)}})return [...map.values()]}
按照精度截取数据(一)
/*** @description: 按照精度截取数据(小数,科学记数法,非四舍五入)* @param {*}* @return {*} string*/export function truncateData(value, decimals) {let amount = String(value);let isDealPosint = amount.split(".");if (!isDealPosint && value * 1 < 0 && isDealPosint.length < 2) {amount = _toNonExponential(value * 1);isDealPosint = amount.split(".");}if (isDealPosint && isDealPosint.length === 2) {let integer = isDealPosint[0];let point = isDealPosint[1];let maxLength = decimals * 1 + integer.length + 1;if (point && point.length) return amount.substring(0, maxLength);}return amount;}/*** @description: 将科学记数法转化正常计数* @param {*} num* @return {*}*/function _toNonExponential(num) {var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/);return num.toFixed(Math.max(0, (m[1] || "").length - m[2]));}
按照精度截取数据(二)
/*** @description: 处理合约中数据精度问题* @param{*}amount* @param{*}decimals* @return{*}*/export function dealDecimals(amount, decimals) {if (!amount) return 0let index = amount.length - decimals;if (index < 1) return _.divide(amount, 10 ** decimals)amount = String(amount);const array = [amount.substr(0, index), amount.substr(index, decimals)];let result = array.join(".");return result;}
String
获取选中内容
const getSelectedText = () => window.getSelection().toString();
生成16进制的随机颜色
const randomHexColor = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}`console.log(randomHexColor());
指定长度的数字随机数
/** @method 返回随机数据戳* @param {len = 8} :number 输入的字符串* callback:string*/export function createNumberStamp(len = 8) {let target = 2 + len * 1return Math.random().toString().slice(2, target)//或者return String(Math.random()).slice(2, target)}
指定范围的随机打印
Math.floor(Math.random()*16)
获取时间戳(毫秒)
- new Date().getTime()
- Date.now()
- Date.parse(newDate()) — 整秒数 ```javascript
function getTimeStamp() { return Date.parse(newDate()) /1000; }
<a name="BATjA"></a>#### 随机字符串(数字加字母)```javascriptfunction createRandomStr(len = 6) {var rdmString = "";for (;rdmString.length < len;rdmString += Math.random().toString(36).substr(2));return rdmString.substr(0, len);}
解析URL携带参数
function parseQuery(val) {var params = {},seg = val.replace(/^\?/, '').split('&'),len = seg.length,p;for (var i = 0; i < len; i++) {if (seg[i]) {p = seg[i].split('=');params[p[0]] = p[1];}}return params;}
复制到粘贴板
function copyHandle(address) {let copy = (e) => {e.preventDefault();e.clipboardData.setData("text/plain", address);message.success("copy successfully");document.removeEventListener("copy", copy);};document.addEventListener("copy", copy);document.execCommand("Copy");}
在字符串中查找给定的单词,并替换为另一个单词
const findAndReplace = (string, wordToFind, wordToReplace) => string.split(wordToFind).join(wordToReplace);let result = findAndReplace(‘I like banana’, ‘banana’, ‘apple’); // I like apple
判断类型(全部小写)
typeOf方法
typeof 可以返回的类型为:number、string、boolean、undefined、object、function
- (1)undefined:是所有没有赋值变量的默认值,自动赋值。
- (2)null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。
prototype.toString.call方法
- number
- string
- boolean
- array
- object
- regexp
- function
- date
/*** @description: judgeType* @param {*} target* @return {number, string, boolean, array, function,object, regexp, date}*/function _judgeTypes (target) {return Object.prototype.toString.call(target).replace(/^\[object\s(\w+)\]$/, '$1').toLowerCase()//return Reflect.apply(Object.prototype.toString, target, []).replace(/^\[object\s(\w+)\]$/, '$1').toLowerCase()}
文本数据脱敏
/*** @description: 长文本省略中间部分* @param {string} str 文本内容* @param {number} start 保留文本头部长度* @param {number} end 保留文本尾部长度* @return {string}*/export function ellipsisStr(str, start = 6, end = 4) {if (typeof str === "string") {return str.slice(0, start) + "..." + str.slice(-end);}return str;}
Number
匹配并且筛选出数字
//1let size = '152270110KB'let matchArr = size.match(/\d+/g)console.log(matchArr) ["152270110"]// 2let size = '152270110KB'size.match(/(\d+)[KB]/gi)console.log(RegExp.$1) "152270110"
截取金额数据(非四舍五入)
/*** @description: 截取金额数据(非四舍五入)* @param {*} number* @param {*} length* @return {*}*/export function toFixed(number, length = 2) {return Math.floor(Math.pow(10, length) * number) / Math.pow(10, length);}
将科学记数法转化正常计数
/*** @description: 将科学记数法转化正常计数* @param {*} num* @return {*}*/function _toNonExponential(num) {var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/);return num.toFixed(Math.max(0, (m[1] || "").length - m[2]));}
算法取整
Math.round(x) 四舍五入Number.prototype.toFixed 四舍五入Math.floor(x) 向下舍入Math.ceil(x) 向上舍入parseInt(7/2) 保留整数部分
弧度换角度
const radianToDegree = radian => (radian * 180.0) / Math.PI;let degree = radianToDegree(2.3); // 131.78
环境
打开浏览器(防止拦截)
/*** @description: open other URL (防拦截)* @param {*} url* @param {*} id* @return {*}*/export function openUrl(url, id = "default") {var a = document.createElement("a");a.setAttribute("href", url);a.setAttribute("target", "_blank");a.setAttribute("id", id);// 防止反复添加if (!document.getElementById(id)) {document.body.appendChild(a);}a.click();}
回到页面顶部
const scrollToTop = () => {const t = document.documentElement.scrollTop || document.body.scrollTop;if (t > 0) {window.requestAnimationFrame(scrollToTop);window.scrollTo(0, t — t / 8);}};
判断是否为苹果系统
export const isAppleMobileDevice = () => {let reg = /iphone|ipod|ipad|Macintosh/i;return reg.test(navigator.userAgent.toLowerCase());}
判断微信环境
export function is_wechat () {var ua = navigator.userAgent.toLowerCase()return ua.match(/MicroMessenger/i) == 'micromessenger';}
JSAPI微信内支付(ios,安卓支付正常)
export function jsSDK (params) {if (typeof window.WeixinJSBridge === 'undefined') {if (document.addEventListener) {document.addEventListener('WeixinJSBridgeReady', function () { onBridgeReady(params) }, false)} else if (document.attachEvent) {document.attachEvent('WeixinJSBridgeReady', function () { onBridgeReady(params) })document.attachEvent('onWeixinJSBridgeReady', function () { onBridgeReady(params) })}} else {onBridgeReady(params)}}function onBridgeReady (params) {window.WeixinJSBridge.invoke('getBrandWCPayRequest', {'appId': params.appId, // 公众号名称,由商户传入'timeStamp': params.timeStamp, // 时间戳,自1970年以来的秒数'nonceStr': params.nonceStr, // 随机串'package': params.package,'signType': params.signType, // 微信签名方式:'paySign': params.paySign // 微信签名},function (res) {if (res.err_msg === 'get_brand_wcpay_request:ok') {// 使用以上方式判断前端返回,微信团队郑重提示:// res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。location.href = 'https://test.develop.privhub.com/pay/success'} else {location.href = 'https://test.develop.privhub.com/pay/fail'}})}
分享到此结束,可能还可以优化,维护更少的变量,目前没有好主意,如果有新的想法的伙伴请email到webkubor@163.com
