UNPKG

tools-for-js

Version:

基于babel构建的JavaScript前端工具库

209 lines (201 loc) 7.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.upperCaseKeys = exports.textTransform = exports.numToChinese = exports.moneyFormat = exports.lowercaseKeys = exports.convertSmallHump = void 0; var chnNumChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; var chnUnitSection = ['', '万', '亿', '万亿', '亿亿']; var chnUnitChar = ['', '十', '百', '千']; // 如果数字含有小数部分,那么可以将小数部分单独取出,将小数部分的数字转换为字符串的方法 var numToChn = function numToChn(params) { var index = params.toString().indexOf('.'); if (index != -1) { var str = params.toString().slice(index); var a = '点'; for (var i = 1; i < str.length; i++) { a += chnNumChar[parseInt(str[i])]; } return a; } else { return ''; } }; // 定义在每个小节的内部进行转化的方法,其他部分则与小节内部转化方法相同 var sectionToChinese = function sectionToChinese(section) { var str = '', chnstr = '', zero = false, count = 0; //zero为是否进行补零, 第一次进行取余由于为个位数,默认不补零 while (section > 0) { var v = section % 10; //对数字取余10,得到的数即为个位数 if (v == 0) { //如果数字为零,则对字符串进行补零 if (zero) { zero = false; //如果遇到连续多次取余都是0,那么只需补一个零即可 chnstr = chnNumChar[v] + chnstr; } } else { zero = true; //第一次取余之后,如果再次取余为零,则需要补零 str = chnNumChar[v]; str += chnUnitChar[count]; chnstr = str + chnstr; } count++; section = Math.floor(section / 10); } return chnstr; }; /* 定义整个数字全部转换的方法,需要依次对数字进行10000为单位的取余,然后分成小节,按小节计算,当每个小节的数不足1000时,则需要进行补零 */ /******* * @description: 阿拉伯数字转中文数字 * @author: 琴时 * @param {Number} params * @return {*} * @example transformToChinese(123456) * 输出:一十二万三千四百五十六 */ var numToChinese = exports.numToChinese = function numToChinese(params) { var a = numToChn(params); params = Math.floor(params); var unitPos = 0; var strIns = '', chnStr = ''; var needZero = false; if (params === 0) { return chnNumChar[0]; } while (params > 0) { var section = params % 10000; if (needZero) { chnStr = chnNumChar[0] + chnStr; } strIns = sectionToChinese(section); strIns += section !== 0 ? chnUnitSection[unitPos] : chnUnitSection[0]; chnStr = strIns + chnStr; needZero = section < 1000 && section > 0; params = Math.floor(params / 10000); unitPos++; } return chnStr + a; }; /******* * @description: 金额格式化函数 * @author: 琴时 * @param {*} value [金额] * @param {*} currency [货币符号] * @param {*} decimals [小数位数] * @return {String} [返回格式好的金额] * @example: moneyFormat(123456.789, '¥', 2) => ¥123,456.79 */ var moneyFormat = exports.moneyFormat = function moneyFormat(value, currency, decimals) { var digitsRE = /(\d{3})(?=\d)/g; //匹配数字之前的3个数字 value = parseFloat(value); //转换成数值保留小数 // 如果传过来的值不是有限数值或者值不存在且值不等于0 if (!isFinite(value) || !value && value !== 0) return ''; //isFinite判断是否是有限数值 currency = currency ? currency : '$'; //如果有指定金币符号就直接用,否则使用美元符号 decimals = decimals ? decimals : 2; //如果有指定小数位就直接用,否则使用2位小数 var stringified = Math.abs(value).toFixed(decimals); //取数值的绝对值后decimals位小数 var _int = stringified.slice(0, -1 - decimals); //取整数部分 var remainder = _int.length % 3; //因为金额都是每3个划分,划分后取剩余的(整数部分取余) var head = remainder > 0 ? _int.slice(0, remainder) + (_int.length > 3 ? ',' : '') : ''; // 计算划分后头部(整数部分超过三位头部加上逗号) var _float = stringified.slice(-1 - decimals); //取小数部分加上小数点 var sign = value < 0 ? '-' : ''; //判断正负数 return sign + currency + head + _int.slice(remainder).replace(digitsRE, '$1,') + //digitsRE, '$1,'==>每3位加1逗号 _float; }; /******* * @description: Txt 转数组对象 * 将txt文件内容转化成定制数组对象 * 将ZFB账号---运动账号---运动密码==>[{'antName','username','password','remark'}] * 将运动账号---运动密码==>[{'username','password','remark'}] * @author: 琴时 * @param {Object} params * @return {*} */ var textTransform = exports.textTransform = function textTransform(params) { var _params$content = params.content, content = _params$content === void 0 ? '' : _params$content, symbol = params.symbol, _params$sign = params.sign, sign = _params$sign === void 0 ? 'ants' : _params$sign, password = params.password, _params$remark = params.remark, remark = _params$remark === void 0 ? '' : _params$remark, _params$index = params.index, index = _params$index === void 0 ? 0 : _params$index; // 将每行字符进行切割成数组 var list = content.split(/[(\r\n)\r\n]+/); // 根据换行或者回车进行识别 var arrayTemp = []; list.forEach(function (item) { item = item.trim(); // 去除首尾空格 if (item) { // 将每行数据通过[symbol]定制符合进行切割 var newList = item.split(symbol).map(function (ele) { return ele.trim(); }); var tempData = {}; if (sign === 'ants') { tempData = { antName: newList[index], username: index === 1 || newList.length === 1 ? newList[0] : newList[1], password: password || newList[2], remark: newList[3] || remark }; } else { tempData = { username: newList[0], password: password || newList[1], remark: newList[2] || remark }; } arrayTemp.push(tempData); } }); return arrayTemp; }; /******* * @description: 变量名下划线转小驼峰 * @author: 琴时 * @param {String} key * @return {String} * @example: convertSmallHump('user_name') => userName */ var convertSmallHump = exports.convertSmallHump = function convertSmallHump(key) { return key.toLowerCase().replace(/_(\w)/g, function (all, letter) { return letter.toUpperCase(); }); }; /******* * @description: 将对象中的键转小写 * @author: 琴时 * @param {Object} obj * @return {Object} */ var lowercaseKeys = exports.lowercaseKeys = function lowercaseKeys(obj) { var result = {}; for (var key in obj) { if (Object.hasOwnProperty.call(obj, key)) { var lowercaseKey = key.toLowerCase(); result[lowercaseKey] = obj[key]; } } return result; }; /******* * @description: 将对象中的键转大写 * @author: 琴时 * @param {Object} obj * @return {Object} */ var upperCaseKeys = exports.upperCaseKeys = function upperCaseKeys(obj) { var result = {}; for (var key in obj) { if (Object.hasOwnProperty.call(obj, key)) { var lowercaseKey = key.toUpperCase(); result[lowercaseKey] = obj[key]; } } return result; };