@iimm/shared
Version:
shared utils on browser and react env
112 lines (106 loc) • 5.85 kB
JavaScript
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) : '');
};