mofang-mopai-utils
Version:
Use it in Mopai system
336 lines (335 loc) • 9.43 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = exports.flat = exports.setGlobalUtils = exports.loadJs = exports.whichTypeOf = exports.isExist = exports.unzip = exports.zip = exports.isNotEmpty = exports.isEmpty = exports.getUUID = exports.calcV2 = exports.calc = exports.getValidObject = exports.unique = exports.throttle = exports.debounce = exports.deepCopy = void 0;
/**
* 魔方魔派系统工具包
*/
var mofang_mopai_calculator_1 = require("./mofang-mopai-calculator");
var mofang_calculator_v2_1 = require("./mofang-calculator-v2");
/**
* 深拷贝
* @param data { any }
* @returns any
*/
function deepCopy(data) {
var d;
if (typeof data === 'object') {
if (Array.isArray(data)) {
d = [];
for (var i = 0, len = data.length; i < len; i++)
d[i] = deepCopy(data[i]);
}
else if (data === null) {
d = null;
}
else if (data.constructor === RegExp) {
d = data;
}
else if (Object.keys(data).length) {
d = {};
for (var key in data) {
var k = key;
d[k] = deepCopy(data[k]);
}
}
else {
d = data;
}
}
else {
d = data;
}
return d;
}
exports.deepCopy = deepCopy;
/**
* 防抖
* @param fn {Function}
* @param delay {number}
* @returns {Function}
*/
function debounce(fn, delay) {
if (delay === void 0) { delay = 200; }
var timer;
if (typeof fn !== 'function') {
throw new TypeError('类型错误,传入函数不是一个方法');
}
return function () {
var _this = this;
var args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(_this, args);
}, delay);
};
}
exports.debounce = debounce;
/**
* 节流
* @param fn - The function to be throttled.
* @param delay - The number of milliseconds to delay.
* @returns A new throttled function.
*/
function throttle(fn, delay) {
if (delay === void 0) { delay = 200; }
var isRunning = false;
if (typeof fn !== 'function') {
throw new TypeError('类型错误,传入函数不是一个方法');
}
return function () {
var args = arguments;
if (isRunning)
return;
isRunning = true;
fn.apply(this, args);
setTimeout(function () {
isRunning = false;
}, delay);
};
}
exports.throttle = throttle;
/**
* 去重
* Returns a new array without duplicate elements.
* @param arr - The array to remove duplicates from.
* @returns A new array without duplicate elements.
*/
function unique(arr) {
if (!Array.isArray(arr)) {
throw new TypeError('类型错误,传入参数不是一个Array');
}
var list = [];
var _loop_1 = function (value) {
if (typeof value === "object" && value !== null) {
if (list.every(function (v) { return JSON.stringify(v) !== JSON.stringify(value); })) {
list.push(value);
}
}
else if (value !== undefined && list.indexOf(value) === -1) {
list.push(value);
}
};
for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {
var value = arr_1[_i];
_loop_1(value);
}
return list;
}
exports.unique = unique;
/**
* Flattens an array of arrays into a single level array.
*
* @param arr - the array to flatten
* @returns a new array with all the elements of the original array, regardless of their nesting level
*/
function flat(arr) {
if (!Array.isArray(arr)) {
throw new TypeError('类型错误,传入参数不是一个Array');
}
return arr.reduce(function (prev, cur) {
return prev.concat(Array.isArray(cur) ? flat(cur) : cur);
}, []);
}
exports.flat = flat;
/**
* 过滤掉object中的无效键值
* @param data object
* @returns object
*/
function getValidObject(data) {
if (typeof data !== 'object' && Object.prototype.toString.call(data) !== '[object Object]') {
throw new TypeError('类型错误,传入参数不是一个Object');
}
var obj = {};
for (var key in data) {
var value = data[key];
var isEnable = false;
if (typeof value === 'object' && value !== null) {
isEnable = isEmpty(value);
}
else {
isEnable = value || value === 0;
}
isEnable && (obj[key] = value);
}
return obj;
}
exports.getValidObject = getValidObject;
/**
* 基于前端的计算器
* @param formula { string } 计算公式
* @returns number 计算结果
*
* @example
* calc('1.2+0.3*0.02+4') // return 5.206
*/
function calc(formula) {
var ca = new mofang_mopai_calculator_1["default"](formula);
return ca.get();
}
exports.calc = calc;
function calcV2(number1, number2, method) {
return (0, mofang_calculator_v2_1["default"])(number1, number2, method);
}
exports.calcV2 = calcV2;
function getUUID(len) {
if (len === void 0) { len = 32; }
var chars = Array.from('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
var uuid = [];
var radix = len;
for (var i = 0; i < len; i++)
uuid[i] = chars[0 | Math.random() * radix];
return uuid.join('');
}
exports.getUUID = getUUID;
/**
* 判断Pbject或Array是否为空
* @param data { object | array }
* @returns boolean
*/
function isEmpty(data) {
if (Array.isArray(data)) {
return data.length === 0;
}
else {
return Object.keys(data).length === 0;
}
}
exports.isEmpty = isEmpty;
function isNotEmpty(data) {
return !isEmpty(data);
}
exports.isNotEmpty = isNotEmpty;
/**
* 格式化数组分组
* @param arr
* @returns array
*/
function zip() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!args || !Array.isArray(args) || args.some(function (item) { return !Array.isArray(item); })) {
throw new TypeError('类型错误,传入参数错误');
}
var resultList = [];
args.forEach(function (list, listIdx) {
list.forEach(function (item, itemIdx) {
if (!resultList[itemIdx])
resultList[itemIdx] = [];
resultList[itemIdx][listIdx] = item;
});
});
return resultList;
}
exports.zip = zip;
function unzip() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!args || !Array.isArray(args) || args.some(function (item) { return !Array.isArray(item); })) {
throw new TypeError('类型错误,传入参数错误');
}
var len = 0;
var resultList = [];
args.forEach(function (list, listIdx) {
if (len === 0) {
len = list.length;
}
if (len !== list.length) {
throw new TypeError('they are not same length Array in list');
}
list.forEach(function (item, itemIdx) {
if (!resultList[itemIdx])
resultList[itemIdx] = [];
resultList[itemIdx][listIdx] = item;
});
});
return resultList;
}
exports.unzip = unzip;
/**
* 判断object|array中是否存在指定参数
* @param keyname { string }
* @param data { object | array }
* @returns boolean
*/
function isExist(keyname, data) {
if (Array.isArray(data)) {
return data.indexOf(keyname) > -1;
}
else {
var keys = Object.keys(data);
return keys.indexOf(keyname) > -1;
}
}
exports.isExist = isExist;
/**
* 判断数据类型
* @param data { any }
* @returns string 数据的类型,小写
*/
function whichTypeOf(data) {
if (typeof data === 'object') {
return Array.isArray(data) ? 'array' : Object.prototype.toString.call(data) === '[object Object]' ? 'object' : 'unknownType';
}
else {
return typeof data;
}
}
exports.whichTypeOf = whichTypeOf;
/**
* 动态置入script标签,引用js文件
* @param src { string } js文件链接
* @param cb { function } 状态回调
* @returns promise 状态回调
*/
function loadJs(src, cb) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.getElementsByTagName('head')[0].appendChild(script);
return new Promise(function (resolve, rejects) {
script.onload = function () {
cb === null || cb === void 0 ? void 0 : cb('ok');
resolve('ok');
};
script.onerror = function () {
cb === null || cb === void 0 ? void 0 : cb('error');
rejects('error');
};
});
}
exports.loadJs = loadJs;
var toolkit = {
deepCopy: deepCopy,
debounce: debounce,
throttle: throttle,
unique: unique,
getValidObject: getValidObject,
calc: calc,
calcV2: calcV2,
getUUID: getUUID,
isEmpty: isEmpty,
isNotEmpty: isNotEmpty,
zip: zip,
unzip: unzip,
isExist: isExist,
whichTypeOf: whichTypeOf,
loadJs: loadJs,
flat: flat
};
exports["default"] = toolkit;
/**
* 设置window全局utils
* @param keyname { string } 键名 [default: $utils]
*/
function setGlobalUtils(keyname) {
var key = keyname || '$utils';
if (window) {
!window[key] && (window[key] = toolkit);
}
}
exports.setGlobalUtils = setGlobalUtils;