UNPKG

@iimm/shared

Version:

shared utils on browser and react env

112 lines (106 loc) 5.85 kB
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } /** 判断数字(或可以转化为数字的文本)在2个数之间/大于/小于/大于等于/小于等于某个数,min和max范围都不传或不是数字的话默认返回false * @example * ``` * isNumberBetween(1,{min:1,max:2,equal:true}) === true * ``` */ export var isNumberBetween = function isNumberBetween(number, options) { var _ref = options || {}, min = _ref.min, max = _ref.max, equal = _ref.equal; var minType = _typeof(min); var maxType = _typeof(max); if (minType === 'undefined' && maxType === 'undefined') return false; if (minType !== 'undefined' && minType !== 'number') return false; if (maxType !== 'undefined' && maxType !== 'number') return false; var num = +number; if (isNaN(num)) return false; var _ref2 = Array.isArray(equal) ? equal : [equal, equal], _ref3 = _slicedToArray(_ref2, 2), minEqual = _ref3[0], maxEqual = _ref3[1]; var isBetween = true; if (minType !== 'undefined') { isBetween = minEqual ? num >= min : num > min; } if (maxType !== 'undefined') { isBetween = isBetween && (maxEqual ? num <= max : num < max); } return isBetween; }; /** 将阿拉伯数字转化为中文数字 */ export var numberToChinese = function numberToChinese(number) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { case: 'upper' }; var confs = { lower: { num: ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'], unit: ['', '十', '百', '千', '万'], level: ['', '万', '亿'] }, upper: { num: ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'], unit: ['', '拾', '佰', '仟'], level: ['', '万', '亿'] }, decimal: { unit: ['分', '角'] }, maxNumber: 999999999999.99 }; // 过滤不合法参数 if (Number(number) > confs.maxNumber) { console.error("The maxNumber is ".concat(confs.maxNumber, ". ").concat(number, " is bigger than it!")); return null; } var conf = confs[(options === null || options === void 0 ? void 0 : options.case) || 'upper']; var numbers = String(Number(number).toFixed(2)).split('.'); var integer = numbers[0].split(''); var decimal = Number(numbers[1]) === 0 ? [] : numbers[1].split(''); // 四位分级 var levels = integer.reverse().reduce(function (pre, item, idx) { var level = pre[0] && pre[0].length < 4 ? pre[0] : []; var value = item === '0' ? conf.num[item] : conf.num[item] + conf.unit[idx % 4]; level.unshift(value); if (level.length === 1) { pre.unshift(level); } else { pre[0] = level; } return pre; }, []); // 整数部分 var _integer = levels.reduce(function (pre, item, idx) { var _level = conf.level[levels.length - idx - 1]; var _item = item.join('').replace(/(零)\1+/g, '$1'); // 连续多个零字的部分设置为单个零字 // 如果这一级只有一个零字,则去掉这级 if (_item === '零') { _item = ''; _level = ''; // 否则如果末尾为零字,则去掉这个零字 } else if (_item[_item.length - 1] === '零') { _item = _item.slice(0, _item.length - 1); } return pre + _item + _level; }, ''); if (!(options !== null && options !== void 0 && options.decimal)) { return options !== null && options !== void 0 && options.money ? "".concat(_integer, "\u5143\u6574") : _integer; } // 小数部分 var _decimal = decimal.map(function (item, idx) { var unit = confs.decimal.unit; var _unit = item !== '0' ? unit[unit.length - idx - 1] : ''; return "".concat(conf.num[item]).concat(_unit); }).join(''); // 如果是整数,则补个整字 return options !== null && options !== void 0 && options.money ? "".concat(_integer, "\u5143") + (_decimal || '整') : "".concat(_integer).concat(_decimal ? "\u70B9".concat(_decimal) : ''); };