js-utils-chs
Version:
自定义工具函数库
189 lines (146 loc) • 56.7 kB
JavaScript
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(self, function() {
return /******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./src/array/fun.js":
/*!**************************!*\
!*** ./src/array/fun.js ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"substring\": () => (/* binding */ substring),\n/* harmony export */ \"substr\": () => (/* binding */ substr),\n/* harmony export */ \"push\": () => (/* binding */ push),\n/* harmony export */ \"pop\": () => (/* binding */ pop),\n/* harmony export */ \"shift\": () => (/* binding */ shift),\n/* harmony export */ \"unshift\": () => (/* binding */ unshift),\n/* harmony export */ \"splice\": () => (/* binding */ splice),\n/* harmony export */ \"split\": () => (/* binding */ split),\n/* harmony export */ \"concat\": () => (/* binding */ concat),\n/* harmony export */ \"sort\": () => (/* binding */ sort),\n/* harmony export */ \"reverse\": () => (/* binding */ reverse),\n/* harmony export */ \"slice\": () => (/* binding */ slice),\n/* harmony export */ \"forEach\": () => (/* binding */ forEach),\n/* harmony export */ \"mapArray\": () => (/* binding */ mapArray),\n/* harmony export */ \"filter\": () => (/* binding */ filter),\n/* harmony export */ \"every\": () => (/* binding */ every),\n/* harmony export */ \"some\": () => (/* binding */ some),\n/* harmony export */ \"indexOf\": () => (/* binding */ indexOf),\n/* harmony export */ \"lastIndexOf\": () => (/* binding */ lastIndexOf),\n/* harmony export */ \"from\": () => (/* binding */ from),\n/* harmony export */ \"of\": () => (/* binding */ of),\n/* harmony export */ \"find\": () => (/* binding */ find),\n/* harmony export */ \"findIndex\": () => (/* binding */ findIndex),\n/* harmony export */ \"includes\": () => (/* binding */ includes),\n/* harmony export */ \"fill\": () => (/* binding */ fill),\n/* harmony export */ \"Keys\": () => (/* binding */ Keys),\n/* harmony export */ \"values\": () => (/* binding */ values),\n/* harmony export */ \"entries\": () => (/* binding */ entries),\n/* harmony export */ \"copyWithin\": () => (/* binding */ copyWithin),\n/* harmony export */ \"isArray\": () => (/* binding */ isArray),\n/* harmony export */ \"join\": () => (/* binding */ join),\n/* harmony export */ \"flat\": () => (/* binding */ flat),\n/* harmony export */ \"flatMap\": () => (/* binding */ flatMap),\n/* harmony export */ \"toString\": () => (/* binding */ toString),\n/* harmony export */ \"reduce\": () => (/* binding */ reduce)\n/* harmony export */ });\n// 数据原生方法\r\n\r\n/**\r\n * 数组截取\r\n * @param {*} arr \r\n * @param {*} start 开始截取索引\r\n * @param {*} end 结束索引\r\n * @returns \r\n */\r\nfunction substring(arr, start, end) {\r\n if (!Array.isArray(arr)) return [];\r\n if (typeof start !== 'number') start = Number(start);\r\n if (typeof end !== 'number') end = Number(end);\r\n if (isNaN(start)) start = 0;\r\n if (isNaN(end)) end = arr.length;\r\n return arr.substring(start, end)\r\n}\r\n\r\n/**\r\n * 数组截取\r\n * @param {*} arr \r\n * @param {*} start 开始截取索引\r\n * @param {*} end 结束索引\r\n * @returns \r\n */\r\nfunction substr(arr, start, end) {\r\n if (!Array.isArray(arr)) return [];\r\n if (typeof start !== 'number') start = Number(start);\r\n if (typeof end !== 'number') end = Number(end);\r\n if (isNaN(start)) start = 0;\r\n if (isNaN(end)) end = arr.length;\r\n return arr.substr(start, end)\r\n}\r\n\r\n/**\r\n * 数组添加元素\r\n * @param {Array} arr 数组\r\n * @param {...any} element 要添加的元素 \r\n * @returns \r\n */\r\nfunction push(arr, ...element) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.push(...element);\r\n}\r\n\r\n/**\r\n * 从后面删除元素,只能是一个,返回值是删除的元素\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction pop(arr) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.pop();\r\n}\r\n\r\n/**\r\n * 从前面删除元素,只能是一个,返回值是删除的元素\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction shift(arr) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.shift();\r\n}\r\n\r\n/**\r\n * 从前面添加元素,添加一个或多个,返回值是添加完后的数组的长度\r\n * @param {Array} arr \r\n * @param {...any} element \r\n * @returns \r\n */\r\nfunction unshift(arr, ...element) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.unshift(...element)\r\n}\r\n\r\n/**\r\n * 删除从 index(索引值)开始之后的那 num(默认到数组的结束位置)个元素,返回值是删除的元素数组\r\n * @param {Array} arr \r\n * @param {Number} index \r\n * @param {Number} num \r\n * @param {...any} element \r\n * @returns \r\n */\r\nfunction splice(arr, index, num, ...element) {\r\n if (!Array.isArray(arr)) return arr;\r\n if (typeof index !== 'number') index = Number(index);\r\n if (typeof num !== 'number') num = Number(num);\r\n if (isNaN(index) || isNaN(num)) return arr;\r\n\r\n // 添加元素\r\n if (element.length > 0) {\r\n return arr.splice(index, num, [...element])\r\n }\r\n\r\n // 删除元素\r\n return arr.splice(index, num)\r\n}\r\n\r\n/**\r\n * 将字符串转化为数组\r\n * @param {Array} arr \r\n * @param {String} str \r\n * @returns \r\n */\r\nfunction split(arr, str = '') {\r\n return arr.split(str)\r\n}\r\n\r\n/**\r\n * 连接两个数组,返回值是连接后的新数组\r\n * @param {Array} arr1 \r\n * @param {Array} arr2 \r\n * @returns \r\n */\r\nfunction concat(arr1, arr2) {\r\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) return arr1;\r\n return arr1.concat(arr2);\r\n}\r\n\r\n/**\r\n * 将数组进行排序,返回值是排好的数组,默认是按照最左边的数字进行排序(非数字整体大小)\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction sort(arr, fn) {\r\n if (!Array.isArray(arr)) return arr\r\n if (typeof fn !== 'function') {\r\n return arr.sort();\r\n }\r\n return arr.sort(fn);\r\n}\r\n\r\n/**\r\n * 将原数组反转,返回值是反转后的数组\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction reverse(arr) {\r\n if (!Array.isArray(arr)) return arr\r\n return arr.reverse();\r\n}\r\n\r\n/**\r\n * 切去索引值start到索引值end(不包含end的值)的数组,返回值是切出去的数组\r\n * @param {Array} arr \r\n * @param {Number} start \r\n * @param {Number} end \r\n * @returns \r\n */\r\nfunction slice(arr, start, end) {\r\n if (!Array.isArray(arr)) return arr;\r\n if (typeof start !== 'number') start = Number(start);\r\n if (typeof end !== 'number') end = Number(end);\r\n if (isNaN(start)) start = 0;\r\n if (isNaN(end)) end = arr.length;\r\n\r\n return arr.slice(start, end);\r\n}\r\n\r\n/**\r\n * 遍历数组,无返回值\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n */\r\nfunction forEach(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n arr.forEach((item, index) => {\r\n typeof fn === 'function' && fn(item, index)\r\n })\r\n}\r\n\r\n/**\r\n * 遍历数组(对原数组的值进行操作),返回一个新数组\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction mapArray(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.map((value, index, array) => {\r\n return typeof fn === \"function\" ? fn(value, index, array) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 过滤数组,返回一个满足要求的数组\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction filter(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.filter((value, index) => {\r\n return typeof fn === \"function\" ? fn(value, index) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 根据判断条件,遍历数组中的元素,是否都满足,若都满足则返回true,反之返回false\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction every(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.every((value, index) => {\r\n return typeof fn === \"function\" ? fn(value, index) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 根据判断条件,遍历数组中的元素,是否存在至少有一个满足,若存在则返回true,反之返回false\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction some(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.some((value, index) => {\r\n return typeof fn === \"function\" ? fn(value, index) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 从前往后查找某个元素的索引值,若有重复的,则返回第一个查到的索引值,若不存在,返回 -1\r\n * @param {Array} arr \r\n * @param {any} value \r\n * @returns \r\n */\r\nfunction indexOf(arr, value) {\r\n if (!value) return -1;\r\n return arr.indexOf(value);\r\n}\r\n\r\n/**\r\n * 从后往前查找某个元素的索引值,若有重复的,则返回第一个查到的索引值,若不存在,返回 -1\r\n * @param {Array} arr \r\n * @param {any} value \r\n * @returns \r\n */\r\nfunction lastIndexOf(arr, value) {\r\n if (!value) return -1;\r\n return arr.lastIndexOf(value)\r\n}\r\n\r\n/**\r\n * 将伪数组变成数组,只要有length的就可以转成数组\r\n * @param {Object} arr \r\n * @returns \r\n */\r\nfunction from(arr) {\r\n if (!arr.hasOwnProperty('length')) return arr\r\n return Array.from(arr);\r\n}\r\n\r\n/**\r\n * 将一组值转换成数组,类似于声明数组\r\n * @param {any} value \r\n * @returns \r\n */\r\nfunction of(value) {\r\n if (!value) return [];\r\n return Array.of(value);\r\n}\r\n\r\n/**\r\n * 找到第一个符合条件的数组成员\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction find(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.find((value, index, array) => {\r\n return typeof fn === \"function\" ? fn(value, index, array) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 找到第一个符合条件的数组成员的索引值\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction findIndex(arr, fn) {\r\n if (!Array.isArray(arr)) return arr;\r\n return arr.findIndex((value, index, array) => {\r\n return typeof fn === \"function\" ? fn(value, index, array) : index >= 0\r\n })\r\n}\r\n\r\n/**\r\n * 判断数组中是否包含特定的值\r\n * @param {Array} arr \r\n * @param {Any} value \r\n * @returns \r\n */\r\nfunction includes(arr, value) {\r\n if (!Array.isArray(arr) || !value) return false;\r\n return arr.includes(value)\r\n}\r\n\r\n/**\r\n * 使用给定的值,填充一个数组(改变原数组)\r\n * @param {*} arr \r\n * @param {*} target 待填充的元素\r\n * @param {*} start 开始填充的位置 - 索引\r\n * @param {*} end 终止填充的位置 - 索引(不包括该位置)\r\n * @returns \r\n */\r\nfunction fill(arr, target, start, end) {\r\n if (!Array.isArray(arr) || !target) return arr\r\n if (typeof start !== 'number') start = Number(start)\r\n if (typeof end !== 'number') end = Number(end)\r\n if (isNaN(start)) start = 0\r\n if (isNaN(end)) end = arr.length\r\n\r\n return arr.fill(target, start, end)\r\n}\r\n\r\n/**\r\n * 遍历数组的键名\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction Keys(arr) {\r\n if (!Array.isArray(arr)) return []\r\n return arr.Keys();\r\n}\r\n\r\n/**\r\n * 遍历数组键值\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction values(arr) {\r\n if (!Array.isArray(arr)) return []\r\n return arr.values()\r\n}\r\n\r\n/**\r\n * 遍历数组的键名和键值\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction entries(arr) {\r\n if (!Array.isArray(arr)) return []\r\n return arr.entries()\r\n}\r\n\r\n/**\r\n * 在当前数组内部,将制定位置的数组复制到其他位置,会覆盖原数组项,返回当前数组\r\n * @param {Array} arr \r\n * @param {Number} target 必选 索引从该位置开始替换数组项\r\n * @param {Number} start 可选 索引从该位置开始读取数组项,默认为0.如果为负值,则从右往左读。\r\n * @param {Number} end 可选 索引到该位置停止读取的数组项,默认是Array.length,如果是负值,表示倒数\r\n * @returns \r\n */\r\nfunction copyWithin(arr, target, start, end) {\r\n if (!Array.isArray(arr) || typeof target !== 'number') return []\r\n if (typeof start !== 'number') start = Number(start)\r\n if (typeof end !== 'number') end = Number(end)\r\n if (isNaN(start)) start = 0\r\n if (isNaN(end)) end = arr.length\r\n\r\n return arr.copyWithin(target, start, end)\r\n}\r\n\r\n/**\r\n * 判断一个值是否为数组的方法,若为数组,返回true,反之返回false\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction isArray(arr) {\r\n return Array.isArray(arr)\r\n}\r\n\r\n/**\r\n * 把数组中的所有元素放入一个字符串,separate表示分隔符,可省略,默认是逗号\r\n * @param {Array} arr \r\n * @param {String} str \r\n * @returns \r\n */\r\nfunction join(arr, str) {\r\n if (!Array.isArray(arr)) return '';\r\n if (str === null || str == undefined) return arr.join();\r\n return arr.join(str)\r\n}\r\n\r\n/**\r\n * 对数组内嵌套的数组“拉平”,就是把数组中的数组的元素挨个拿出来,放数组元素所在位置,返回一个新的数组,不会影响到原来的数组\r\n * @param {Array} arr \r\n * @param {Number} pliy pliy表示拉平的层数,默认是1层,想无限拉平可以传入Infinity关键字\r\n * @returns \r\n */\r\nfunction flat(arr, pliy = 1) {\r\n if (!Array.isArray(arr)) return [];\r\n return arr.flat(pliy);\r\n}\r\n\r\n/**\r\n * 对原数组的每个成员执行一个函数,相当于执行Array.prototype.map(),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。只能展开一层数组\r\n * arr.flatMap((x) => [x, x * 2]) // [2, 4, 3, 6, 4, 8]\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction flatMap(arr, fn) {\r\n if (!Array.isArray(arr)) return [];\r\n return arr.flatMap((x) => {\r\n return typeof fn === 'function' ? fn(x) : [x, x * 2]\r\n })\r\n}\r\n\r\n/**\r\n * 将数组转换为字符串并返回。数组中的元素之间用逗号分隔。\r\n * @param {Array} arr \r\n * @returns \r\n */\r\nfunction toString(arr) {\r\n if (!Array.isArray(arr)) return '';\r\n return arr.toString()\r\n}\r\n\r\n/**\r\n * 对数组中的每个元素执行一个提供的函数(升序执行),将其结果汇总为单个返回值。\r\n * 接收4个参数:\r\n * Accumulator (acc) (累计器)\r\n * Current Value (cur) (当前值)\r\n * Current Index (idx) (当前索引)\r\n * Source Array (src) (源数组)\r\n * @param {Array} arr \r\n * @param {Function} fn \r\n * @returns \r\n */\r\nfunction reduce(arr, fn) {\r\n if (!Array.isArray(arr)) return '';\r\n return arr.reduce((acc, value, index, array) => {\r\n return typeof fn === 'function' ? fn(acc, value, index, array) : acc + value\r\n })\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/array/fun.js?");
/***/ }),
/***/ "./src/array/index.js":
/*!****************************!*\
!*** ./src/array/index.js ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"randomArray\": () => (/* binding */ randomArray)\n/* harmony export */ });\n/**\r\n * 数组乱序\r\n * 该函数可以打乱一维数组元素的顺序,这是随机过程\r\n * @param {Array} array 一维数组\r\n * @returns \r\n */\r\nfunction randomArray(array = []) {\r\n // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0\r\n return array.sort(() => Math.random() - 0.5);\r\n}\r\n\n\n//# sourceURL=webpack://js-utils-chs/./src/array/index.js?");
/***/ }),
/***/ "./src/colorGradient.js":
/*!******************************!*\
!*** ./src/colorGradient.js ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"rgbToHex\": () => (/* binding */ rgbToHex),\n/* harmony export */ \"hexToRgb\": () => (/* binding */ hexToRgb),\n/* harmony export */ \"colorGradient\": () => (/* binding */ colorGradient),\n/* harmony export */ \"colorToRgba\": () => (/* binding */ colorToRgba)\n/* harmony export */ });\n/**\r\n * RGB转十六进制Hex\r\n * 该函数可以将一个RGB颜色值转换成一个Hex的十六进制颜色值\r\n * @param {String} rgb RGB颜色值,如rgb(230, 231, 233)\r\n * @returns \r\n */\r\nfunction rgbToHex(rgb) {\r\n let _this = rgb;\r\n let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\r\n\r\n if (/^(rgb|RGB)/.test(_this)) {\r\n let aColor = _this.replace(/(?:\\(|\\)|rgb|RGB)*/g, \"\").split(\",\");\r\n let strHex = \"#\";\r\n for (let i = 0; i < aColor.length; i++) {\r\n let hex = Number(aColor[i]).toString(16); //转16进制\r\n hex = String(hex).length == 1 ? 0 + '' + hex : hex; //保证每个rgb的值为2位\r\n if (hex === \"0\") {\r\n hex += hex;\r\n }\r\n strHex += hex;\r\n }\r\n if (strHex.length !== 7) {\r\n strHex = _this\r\n }\r\n return strHex;\r\n } else if (reg.test(_this)) {\r\n let aNum = _this.replace(/#/, '').split('');\r\n if (aNum.length === 6) {\r\n return _this\r\n } else if (aNum.length === 3) {\r\n let numHex = \"#\";\r\n for (let i = 0; i < aNum.length; i++) {\r\n numHex += (aNum[i] + aNum[i])\r\n }\r\n return numHex;\r\n }\r\n } else {\r\n return _this;\r\n }\r\n}\r\n\r\n/**\r\n * 十六进制Hex转RGB\r\n * 该函数可以将一个Hex的十六进制颜色值转换成一个RGB颜色值\r\n * @param {String} sColor HEx颜色值,如#0afdce\r\n * @param {Boolean} str 决定该函数返回的是数组还是 rgb值\r\n * @returns \r\n */\r\nfunction hexToRgb(sColor, str = true) {\r\n let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\r\n sColor = sColor.toLowerCase(); //将字符串转小写\r\n if (sColor && reg.test(sColor)) {\r\n if (sColor.length === 4) {\r\n let sColorNew = '#';\r\n for (let i = 0; i < 4; i++) {\r\n sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))\r\n }\r\n sColor = sColorNew\r\n }\r\n // 处理六位的颜色值\r\n let sColorChange = [];\r\n for (let i = 1; i < 7; i += 2) {\r\n sColorChange.push(parseInt(\"0x\" + sColor.slice(i, i + 2)));\r\n }\r\n\r\n if (!str) {\r\n return sColorChange\r\n } else {\r\n return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;\r\n }\r\n } else if (/^(rgb|RGB)/.test(sColor)) {\r\n let arr = sColor.replace(/(?:\\(|\\)|rgb|RGB)*/g, \"\").split(\",\")\r\n return arr.map(val => Number(val));\r\n } else {\r\n return sColor\r\n }\r\n}\r\n\r\n/**\r\n * 颜色渐变\r\n * 该函数实现两个颜色值之间等分取值,返回一个数组,元素为十六进制形式的颜色值,数组长度为step值。 例如:colorGradient('rgb(250, 250, 250)', 'rgb(252, 252, 252)', 3),得到的结果为[\"#fafafa\", \"#fafafa\", \"#fbfbfb\"]\r\n * @param {String} startColor 开始颜色值,可以是HEX或者RGB颜色值,如#0afdce或者rgb(120, 130, 150)\r\n * @param {String} endColor 结束颜色值,可以是HEX或者RGB颜色值,如#0afdce或者rgb(120, 130, 150)\r\n * @param {Number} step 均分值,把开始值和结束值平均分成多少份\r\n * @returns \r\n */\r\nfunction colorGradient(startColor = 'rgb(0, 0, 0)', endColor = 'rgb(255, 255, 255)', step = 10) {\r\n let startRGB = hexToRgb(startColor, false);\r\n let startR = startRGB[0];\r\n let startG = startRGB[1];\r\n let startB = startRGB[2];\r\n\r\n let endRGB = hexToRgb(endColor, false);\r\n let endR = endRGB[0];\r\n let endG = endRGB[1];\r\n let endB = endRGB[2];\r\n\r\n let sR = (endR - startR) / step; //总差值\r\n let sG = (endG - startG) / step;\r\n let sB = (endB - startB) / step;\r\n let colorArr = [];\r\n for (let i = 0; i < step; i++) {\r\n // 计算每一步的hex 值\r\n let hex = rgbToHex('rgb(' + Math.round((sR * i + startR)) + ',' + Math.round((sG * i + startG)) + ',' + Math.round((sB * i + startB)) + ')');\r\n colorArr.push(hex);\r\n }\r\n return colorArr\r\n}\r\n\r\n/**\r\n * 颜色透明度\r\n * 该函数可以接受一个十六进制或者rgb格式的颜色值(不能接受命名式颜色格式,比如white),返回此颜色的rgba格式值\r\n * @param {String} color 颜色值,只能hex或者rgba格式\r\n * @param {Number} alpha 不透明度值,取值为0-1之间\r\n * @returns \r\n */\r\nfunction colorToRgba(color, alpha = 0.3) {\r\n alpha = alpha > 1 ? 1 : alpha;\r\n color = rgbToHex(color);\r\n // 十六进制颜色值的正则表达式\r\n let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;\r\n /* 16进制颜色转为RGB格式 */\r\n let sColor = color.toLowerCase();\r\n if (sColor && reg.test(sColor)) {\r\n if (sColor.length === 4) {\r\n let sColorNew = '#';\r\n for (let i = 1; i < 4; i += 1) {\r\n sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));\r\n }\r\n sColor = sColorNew;\r\n }\r\n // 处理六位的颜色值\r\n let sColorChange = [];\r\n for (let i = 1; i < 7; i += 2) {\r\n sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)));\r\n }\r\n // return sColorChange.join(',')\r\n return 'rgba(' + sColorChange.join(',') + ',' + alpha + ')';\r\n }\r\n else {\r\n return sColor;\r\n }\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/colorGradient.js?");
/***/ }),
/***/ "./src/debounce.js":
/*!*************************!*\
!*** ./src/debounce.js ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"debounce\": () => (/* binding */ debounce)\n/* harmony export */ });\nlet timeout = null;\r\n\r\n/**\r\n * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数\r\n * @param {Function} func 要执行的回调函数\r\n * @param {Number} wait 延时的时间\r\n * @param {Boolean} immediate 是否立即执行\r\n */\r\nfunction debounce(func, wait = 500, immediate = false) {\r\n // 清除定时器\r\n if (timeout !== null) clearTimeout(timeout);\r\n // 立即执行,此类情况一般用不到\r\n if (immediate) {\r\n let callNow = !timeout;\r\n timeout = setTimeout(function () {\r\n timeout = null\r\n }, wait)\r\n if (callNow) typeof func === 'function' && func()\r\n } else {\r\n // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法\r\n timeout = setTimeout(function () {\r\n typeof func === 'function' && func();\r\n }, wait)\r\n }\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/debounce.js?");
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"deepClone\": () => (/* reexport safe */ _object_deepClone__WEBPACK_IMPORTED_MODULE_0__.deepClone),\n/* harmony export */ \"deepMege\": () => (/* reexport safe */ _object_deepClone__WEBPACK_IMPORTED_MODULE_0__.deepMege),\n/* harmony export */ \"queryParams\": () => (/* reexport safe */ _object_queryParams__WEBPACK_IMPORTED_MODULE_1__.queryParams),\n/* harmony export */ \"proxy\": () => (/* reexport safe */ _object_proxy__WEBPACK_IMPORTED_MODULE_2__.proxy),\n/* harmony export */ \"proxyCustom\": () => (/* reexport safe */ _object_proxy__WEBPACK_IMPORTED_MODULE_2__.proxyCustom),\n/* harmony export */ \"timeFormat\": () => (/* reexport safe */ _time_timeFormat__WEBPACK_IMPORTED_MODULE_3__.timeFormat),\n/* harmony export */ \"timeForm\": () => (/* reexport safe */ _time_timeFrom__WEBPACK_IMPORTED_MODULE_4__.timeForm),\n/* harmony export */ \"debounce\": () => (/* reexport safe */ _debounce__WEBPACK_IMPORTED_MODULE_5__.debounce),\n/* harmony export */ \"throttle\": () => (/* reexport safe */ _throttle__WEBPACK_IMPORTED_MODULE_6__.throttle),\n/* harmony export */ \"strSplit\": () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_7__.strSplit),\n/* harmony export */ \"trim\": () => (/* reexport safe */ _string__WEBPACK_IMPORTED_MODULE_7__.trim),\n/* harmony export */ \"rgbToHex\": () => (/* reexport safe */ _colorGradient__WEBPACK_IMPORTED_MODULE_8__.rgbToHex),\n/* harmony export */ \"hexToRgb\": () => (/* reexport safe */ _colorGradient__WEBPACK_IMPORTED_MODULE_8__.hexToRgb),\n/* harmony export */ \"colorGradient\": () => (/* reexport safe */ _colorGradient__WEBPACK_IMPORTED_MODULE_8__.colorGradient),\n/* harmony export */ \"colorToRgba\": () => (/* reexport safe */ _colorGradient__WEBPACK_IMPORTED_MODULE_8__.colorToRgba),\n/* harmony export */ \"random\": () => (/* reexport safe */ _math__WEBPACK_IMPORTED_MODULE_9__.random),\n/* harmony export */ \"randomArray\": () => (/* reexport safe */ _array__WEBPACK_IMPORTED_MODULE_10__.randomArray),\n/* harmony export */ \"test\": () => (/* reexport module object */ _test__WEBPACK_IMPORTED_MODULE_11__),\n/* harmony export */ \"array\": () => (/* reexport module object */ _array_fun__WEBPACK_IMPORTED_MODULE_12__)\n/* harmony export */ });\n/* harmony import */ var _object_deepClone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./object/deepClone */ \"./src/object/deepClone.js\");\n/* harmony import */ var _object_queryParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./object/queryParams */ \"./src/object/queryParams.js\");\n/* harmony import */ var _object_proxy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./object/proxy */ \"./src/object/proxy.js\");\n/* harmony import */ var _time_timeFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./time/timeFormat */ \"./src/time/timeFormat.js\");\n/* harmony import */ var _time_timeFrom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./time/timeFrom */ \"./src/time/timeFrom.js\");\n/* harmony import */ var _debounce__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./debounce */ \"./src/debounce.js\");\n/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./throttle */ \"./src/throttle.js\");\n/* harmony import */ var _string__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./string */ \"./src/string/index.js\");\n/* harmony import */ var _colorGradient__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./colorGradient */ \"./src/colorGradient.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./math */ \"./src/math/index.js\");\n/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./array */ \"./src/array/index.js\");\n/* harmony import */ var _test__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./test */ \"./src/test.js\");\n/* harmony import */ var _array_fun__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./array/fun */ \"./src/array/fun.js\");\n // 对象深度克隆 || 对象深度合并\r\n //对象转URL参数\r\n\r\n\r\n //时间戳日期格式化\r\n //时间戳转为多久之前\r\n\r\n //防抖\r\n //节流\r\n\r\n //字符处理文件\r\n\r\n //颜色值的一个转换\r\n\r\n\r\n\r\n\r\n; //验证\r\n //数组方法\r\n\r\n\n\n//# sourceURL=webpack://js-utils-chs/./src/index.js?");
/***/ }),
/***/ "./src/math/index.js":
/*!***************************!*\
!*** ./src/math/index.js ***!
\***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"random\": () => (/* binding */ random)\n/* harmony export */ });\n/**\r\n * 随机数值\r\n * 该方法可以返回在\"min\"和\"max\"之间的数值,要求\"min\"和\"max\"都为数值,且\"max\"大于或等于\"min\",否则返回0.\r\n * @param {Number} min 最小值,最小值可以等于该值\r\n * @param {Number} max 最大值,最大值可以等于该值\r\n * @returns \r\n */\r\nfunction random(min, max) {\r\n if (min >= 0 && max > 0 && max >= min) {\r\n let gab = max - min + 1;\r\n return Math.floor(Math.random() * gab + min);\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\n\n//# sourceURL=webpack://js-utils-chs/./src/math/index.js?");
/***/ }),
/***/ "./src/object/deepClone.js":
/*!*********************************!*\
!*** ./src/object/deepClone.js ***!
\*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"deepClone\": () => (/* binding */ deepClone),\n/* harmony export */ \"deepMege\": () => (/* binding */ deepMege)\n/* harmony export */ });\n/**\r\n * 对象深度克隆\r\n * @param {any} target \r\n * @param {Map()} map \r\n * @returns any\r\n */\r\n\r\n/**\r\n * 测试数据\r\n const obj1 = {\r\n a: 1,\r\n b: ['e', 'f', 'g'],\r\n c: { h: { i: 2 } },\r\n d: function () { }\r\n }\r\n obj1.b.push(obj1.c)\r\n obj1.c.j = obj1.b\r\n\r\n let datas = deepClone(obj1);\r\n */\r\n\r\nfunction deepClone(target, map = new Map()) {\r\n if (target !== null && typeof target === 'object') {\r\n // 从缓存容器中读取克隆对象\r\n let cloneTarget = map.get(target)\r\n // 如果存在, 返回前面缓存的克隆对象\r\n if (cloneTarget) {\r\n return cloneTarget\r\n }\r\n // 创建克隆对象(可能是{}或者[]) \r\n if (target instanceof Array) {\r\n cloneTarget = []\r\n // 缓存到map中\r\n map.set(target, cloneTarget)\r\n target.forEach((item, index) => {\r\n cloneTarget[index] = deepClone(item, map)\r\n })\r\n } else {\r\n cloneTarget = {}\r\n // 缓存到map中\r\n map.set(target, cloneTarget)\r\n Object.keys(target).forEach(key => {\r\n cloneTarget[key] = deepClone(target[key], map)\r\n })\r\n }\r\n return cloneTarget\r\n }\r\n return target\r\n}\r\n\r\n/**\r\n * 对象深度合并\r\n * @param {Object} target \r\n * @param {Object} soutce \r\n */\r\nfunction deepMege(target = {}, soutce = {}) {\r\n if (typeof target !== 'object' || typeof soutce !== 'object') return false;\r\n target = deepClone(target);\r\n\r\n for (let prop in soutce) {\r\n if (!soutce.hasOwnProperty(prop)) continue;\r\n if (prop in target) {\r\n if (typeof target[prop] !== 'object') {\r\n target[prop] = soutce[prop];\r\n } else {\r\n if (typeof soutce[prop] !== \"object\") {\r\n target[prop] = soutce[prop];\r\n } else {\r\n // 判断是不是数组,是数组就合并数组\r\n if (target[prop].concat && soutce[prop].concat) {\r\n target[prop] = target[prop].concat(soutce[prop])\r\n } else {\r\n // 如果都是对象,递归合并\r\n target[prop] = deepMege(target[prop], soutce[prop]);\r\n }\r\n }\r\n }\r\n } else {\r\n target[prop] = soutce[prop]\r\n }\r\n }\r\n return target\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/object/deepClone.js?");
/***/ }),
/***/ "./src/object/proxy.js":
/*!*****************************!*\
!*** ./src/object/proxy.js ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"proxy\": () => (/* binding */ proxy),\n/* harmony export */ \"proxyCustom\": () => (/* binding */ proxyCustom)\n/* harmony export */ });\n/**\r\n * 代理\r\n * @param {Object} obj //需要代理的对象\r\n * @param {Function} getFn //读取时触发\r\n * @param {Function} setFn // 修改属性||添加属性时 触发\r\n * @param {Function} delFn // 删除属性时触发\r\n * @returns \r\n */\r\nfunction proxy(obj, getFn, setFn, delFn) {\r\n if (typeof obj !== 'object') return \"请传入一个对象或者是数组\"\r\n return new Proxy(obj, {\r\n get(target, propKey, receiver) {\r\n getFn && getFn(target, propKey, receiver)\r\n return target[propKey]\r\n },\r\n set(target, propKey, value, receiver) {\r\n setFn && setFn(target, propKey, value, receiver)\r\n target[propKey] = value;\r\n },\r\n deleteProperty(target, propKey) {\r\n delFn && delFn(target, propKey)\r\n return delete target[propKey];\r\n },\r\n })\r\n}\r\n\r\n/**\r\n * 自定义代理\r\n * @param {Object} obj // 需要代理的对象\r\n * @param {Object} reflect // 设置代理\r\n */\r\nfunction proxyCustom(obj, reflect = {}) {\r\n if (typeof obj !== \"object\" || typeof reflect !== 'object') return \"请传入一个对象或者是数组\"\r\n return new Proxy(obj, reflect);\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/object/proxy.js?");
/***/ }),
/***/ "./src/object/queryParams.js":
/*!***********************************!*\
!*** ./src/object/queryParams.js ***!
\***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"queryParams\": () => (/* binding */ queryParams)\n/* harmony export */ });\n\r\n/**\r\n * 对象转URL参数\r\n * @param {*} data \r\n * @param {*} isPrefix \r\n * @param {*} arrayFormat \r\n * @returns \r\n */\r\nfunction queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {\r\n let prefix = isPrefix ? '?' : '';\r\n let _result = [];\r\n\r\n if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets'\r\n\r\n for (let key in data) {\r\n let value = data[key];\r\n // 去掉为空的参数\r\n if (['', undefined, null].indexOf(value) >= 0) continue\r\n\r\n // 如果值为数组,另行处理\r\n if (value.constructor === Array) {\r\n switch (arrayFormat) {\r\n case 'indices':\r\n // 结果: ids[0]=1&ids[1]=2&ids[2]=3\r\n for (let i = 0; i < value.length; i++) {\r\n _result.push(key + '[' + i + ']=' + value[i])\r\n }\r\n break\r\n case 'brackets':\r\n // 结果: ids[]=1&ids[]=2&ids[]=3\r\n value.forEach(_value => {\r\n _result.push(key + '[]=' + _value)\r\n })\r\n break;\r\n case 'repeat':\r\n // 结果: ids=1&ids=2&ids=3\r\n value.forEach(_value => {\r\n _result.push(key + '=' + _value)\r\n })\r\n break;\r\n case 'comma':\r\n // 结果: ids=1,2,3\r\n let commaStr = \"\";\r\n value.forEach(_value => {\r\n commaStr += (commaStr ? \",\" : \"\") + _value;\r\n })\r\n _result.push(key + '=' + commaStr)\r\n break;\r\n default:\r\n value.forEach(_value => {\r\n _result.push(key + '[]=' + _value)\r\n })\r\n\r\n }\r\n } else {\r\n _result.push(key + \"=\" + value)\r\n }\r\n }\r\n return _result.length ? prefix + _result.join('&') : ''\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/object/queryParams.js?");
/***/ }),
/***/ "./src/string/index.js":
/*!*****************************!*\
!*** ./src/string/index.js ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"strSplit\": () => (/* binding */ strSplit),\n/* harmony export */ \"trim\": () => (/* binding */ trim)\n/* harmony export */ });\n/**\r\n * 字符串替换\r\n * @param {string} str 要替换的字符串\r\n * @param {string} replace 被替换的元素\r\n * @param {string} replaceWith 结果的元素\r\n * @returns \r\n */\r\nfunction strSplit(str, replace = ' ', replaceWith = ' ') {\r\n // 把空格替换成占位符\r\n let strs = str.toString().split(replace);\r\n return strs.join(replaceWith);\r\n}\r\n\r\n/**\r\n * 该方法可以去除空格,分别可以去除所有空格,两端空格,左边空格,右边空格,默认为去除两端空格\r\n * @param {String} str 字符串\r\n * @param {String} pos 去除那些位置的空格,可选为:both-默认值,去除两端空格,left-去除左边空格,right-去除右边空格,all-去除包括中间和两端的所有空格\r\n * @returns \r\n */\r\nfunction trim(str, pos = 'both') {\r\n if (pos == 'both') {\r\n return str.replace(/^\\s+|\\s+$/g, \"\");\r\n } else if (pos == \"left\") {\r\n return str.replace(/^\\s*/, '');\r\n } else if (pos == 'right') {\r\n return str.replace(/(\\s*$)/g, \"\");\r\n } else if (pos == 'all') {\r\n return str.replace(/\\s+/g, \"\");\r\n } else {\r\n return str;\r\n }\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/string/index.js?");
/***/ }),
/***/ "./src/test.js":
/*!*********************!*\
!*** ./src/test.js ***!
\*********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"email\": () => (/* binding */ email),\n/* harmony export */ \"mobile\": () => (/* binding */ mobile),\n/* harmony export */ \"url\": () => (/* binding */ url),\n/* harmony export */ \"date\": () => (/* binding */ date),\n/* harmony export */ \"dateISO\": () => (/* binding */ dateISO),\n/* harmony export */ \"number\": () => (/* binding */ number),\n/* harmony export */ \"digits\": () => (/* binding */ digits),\n/* harmony export */ \"idCard\": () => (/* binding */ idCard),\n/* harmony export */ \"carNo\": () => (/* binding */ carNo),\n/* harmony export */ \"amount\": () => (/* binding */ amount),\n/* harmony export */ \"chinese\": () => (/* binding */ chinese),\n/* harmony export */ \"letter\": () => (/* binding */ letter),\n/* harmony export */ \"enOrNum\": () => (/* binding */ enOrNum),\n/* harmony export */ \"contains\": () => (/* binding */ contains),\n/* harmony export */ \"range\": () => (/* binding */ range),\n/* harmony export */ \"rangeLength\": () => (/* binding */ rangeLength),\n/* harmony export */ \"landline\": () => (/* binding */ landline),\n/* harmony export */ \"empty\": () => (/* binding */ empty),\n/* harmony export */ \"jsonString\": () => (/* binding */ jsonString),\n/* harmony export */ \"array\": () => (/* binding */ array),\n/* harmony export */ \"object\": () => (/* binding */ object),\n/* harmony export */ \"code\": () => (/* binding */ code)\n/* harmony export */ });\n/**\r\n * 验证电子邮箱格式\r\n */\r\nfunction email(value) {\r\n return /^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$/.test(value);\r\n}\r\n\r\n/**\r\n * 验证手机格式\r\n */\r\nfunction mobile(value) {\r\n return /^1[3-9]\\d{9}$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证URL格式\r\n */\r\nfunction url(value) {\r\n return /http(s)?:\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w-.\\/?%&=]*)?/.test(value)\r\n}\r\n\r\n/**\r\n * 验证日期格式\r\n */\r\nfunction date(value) {\r\n return !/Invalid|NaN/.test(new Date(value).toString())\r\n}\r\n\r\n/**\r\n * 验证ISO类型的日期格式\r\n */\r\nfunction dateISO(value) {\r\n return /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证十进制数字\r\n */\r\nfunction number(value) {\r\n return /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证整数\r\n */\r\nfunction digits(value) {\r\n return /^\\d+$/.test(value)\r\n}\r\n\r\n/**\r\n * 验证身份证号码\r\n */\r\nfunction idCard(value) {\r\n return /^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$/.test(\r\n value)\r\n}\r\n\r\n/**\r\n * 是否车牌号\r\n */\r\nfunction carNo(value) {\r\n // 新能源车牌\r\n const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;\r\n // 旧车牌\r\n const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;\r\n if (value.length === 7) {\r\n return creg.test(value);\r\n } else if (value.length === 8) {\r\n return xreg.test(value);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * 金额,只允许2位小数\r\n */\r\nfunction amount(value) {\r\n //金额,只允许保留两位小数\r\n return /^[1-9]\\d*(,\\d{3})*(\\.\\d{1,2})?$|^0\\.\\d{1,2}$/.test(value);\r\n}\r\n\r\n/**\r\n * 中文\r\n */\r\nfunction chinese(value) {\r\n let reg = /^[\\u4e00-\\u9fa5]+$/gi;\r\n return reg.test(value);\r\n}\r\n\r\n/**\r\n * 只能输入字母\r\n */\r\nfunction letter(value) {\r\n return /^[a-zA-Z]*$/.test(value);\r\n}\r\n\r\n/**\r\n * 只能是字母或者数字\r\n */\r\nfunction enOrNum(value) {\r\n //英文或者数字\r\n let reg = /^[0-9a-zA-Z]*$/g;\r\n return reg.test(value);\r\n}\r\n\r\n/**\r\n * 验证是否包含某个值\r\n */\r\nfunction contains(value, param) {\r\n return value.indexOf(param) >= 0\r\n}\r\n\r\n/**\r\n * 验证一个值范围[min, max]\r\n */\r\nfunction range(value, param) {\r\n return value >= param[0] && value <= param[1]\r\n}\r\n\r\n/**\r\n * 验证一个长度范围[min, max]\r\n */\r\nfunction rangeLength(value, param) {\r\n return value.length >= param[0] && value.length <= param[1]\r\n}\r\n\r\n/**\r\n * 是否固定电话\r\n */\r\nfunction landline(value) {\r\n let reg = /^\\d{3,4}-\\d{7,8}(-\\d{3,4})?$/;\r\n return reg.test(value);\r\n}\r\n\r\n/**\r\n * 判断是否为空\r\n */\r\nfunction empty(value) {\r\n switch (typeof value) {\r\n case 'undefined':\r\n return true;\r\n case 'string':\r\n if (value.replace(/(^[ \\t\\n\\r]*)|([ \\t\\n\\r]*$)/g, '').length == 0) return true;\r\n break;\r\n case 'boolean':\r\n if (!value) return true;\r\n break;\r\n case 'number':\r\n if (0 === value || isNaN(value)) return true;\r\n break;\r\n case 'object':\r\n if (null === value || value.length === 0) return true;\r\n for (var i in value) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * 是否json字符串\r\n */\r\nfunction jsonString(value) {\r\n if (typeof value == 'string') {\r\n try {\r\n var obj = JSON.parse(value);\r\n if (typeof obj == 'object' && obj) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n\r\n/**\r\n * 是否数组\r\n */\r\nfunction array(value) {\r\n if (typeof Array.isArray === \"export function\") {\r\n return Array.isArray(value);\r\n } else {\r\n return Object.prototype.toString.call(value) === \"[object Array]\";\r\n }\r\n}\r\n\r\n/**\r\n * 是否对象\r\n */\r\nfunction object(value) {\r\n return Object.prototype.toString.call(value) === '[object Object]';\r\n}\r\n\r\n/**\r\n * 是否短信验证码\r\n */\r\nfunction code(value, len = 6) {\r\n return new RegExp(`^\\\\d{${len}}$`).test(value);\r\n}\r\n\r\n\r\n// export default {\r\n// email,\r\n// mobile,\r\n// url,\r\n// date,\r\n// dateISO,\r\n// number,\r\n// digits,\r\n// idCard,\r\n// carNo,\r\n// amount,\r\n// chinese,\r\n// letter,\r\n// enOrNum,\r\n// contains,\r\n// range,\r\n// rangeLength,\r\n// empty,\r\n// isEmpty: empty,\r\n// jsonString,\r\n// landline,\r\n// object,\r\n// array,\r\n// code\r\n// }\r\n\n\n//# sourceURL=webpack://js-utils-chs/./src/test.js?");
/***/ }),
/***/ "./src/throttle.js":
/*!*************************!*\
!*** ./src/throttle.js ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"throttle\": () => (/* binding */ throttle)\n/* harmony export */ });\nlet timer, flag;\r\n/**\r\n * 节流原理:在一定时间内,只能触发一次\r\n * @param {*} func \r\n * @param {*} wait \r\n * @param {*} immediate \r\n */\r\nfunction throttle(func, wait = 500, immediate = true) {\r\n if (immediate) {\r\n if (!flag) {\r\n flag = true;\r\n // 如果适合立即执行,则在wait毫秒内开始执行\r\n typeof func === 'function' && func()\r\n timer = setTimeout(() => {\r\n flag = false;\r\n }, wait);\r\n }\r\n } else {\r\n if (!flag) {\r\n flag = true\r\n // 如果是非立即执行,则在wait毫秒内的结束处执行\r\n timer = setTimeout(() => {\r\n flag = false;\r\n typeof func === 'function' && func()\r\n }, wait)\r\n }\r\n }\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/throttle.js?");
/***/ }),
/***/ "./src/time/timeFormat.js":
/*!********************************!*\
!*** ./src/time/timeFormat.js ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeFormat\": () => (/* binding */ timeFormat)\n/* harmony export */ });\n/**\r\n * 时间戳日期格式化\r\n * @param {Number || null} dateTime 时间戳\r\n * @param {string} fmt yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 长度大于一的有前导零 准确到 年月日时分秒\r\n * @returns string\r\n */\r\nfunction timeFormat(dateTime = null, fmt = \"yy-mm-dd\") {\r\n // 如果 dateTime 为null , 获取当前的时间\r\n if (!dateTime) dateTime = Number(new Date());\r\n // 如果时间戳的长度为10,就 *1000\r\n if (dateTime.toString().length === 10) dateTime *= 1000;\r\n let date = new Date(dateTime);\r\n let ret;\r\n let opt = {\r\n \"y+\": date.getFullYear().toString(), // 年\r\n \"m+\": (date.getMonth() + 1).toString(), // 月\r\n \"d+\": date.getDate().toString(), // 日\r\n \"h+\": date.getHours().toString(), // 时\r\n \"M+\": date.getMinutes().toString(), // 分\r\n \"s+\": date.getSeconds().toString() // 秒\r\n // 有其他格式化字符需求可以继续添加,必须转化成字符串\r\n };\r\n\r\n for (let k in opt) {\r\n ret = new RegExp(`${k}`).exec(fmt); //检索 fmt的k值,返回找到的值,并确定其位置\r\n if (ret) {\r\n // 用于replace方法 把 fmt对应的值替换成ret[1],并且根据fmt值的长度判断是否需要前导零,padStart字符串前填充\r\n fmt = fmt.replace(ret[0], ret[0].length === 1 ? (opt[k]) : (opt[k].padStart(ret[0].length, '0')))\r\n }\r\n }\r\n return fmt\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/time/timeFormat.js?");
/***/ }),
/***/ "./src/time/timeFrom.js":
/*!******************************!*\
!*** ./src/time/timeFrom.js ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"timeForm\": () => (/* binding */ timeForm)\n/* harmony export */ });\n/* harmony import */ var _timeFormat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timeFormat */ \"./src/time/timeFormat.js\");\n\r\n\r\n/**\r\n * 时间戳转为多久之前\r\n * @param {String} dateTime \r\n * @param {String || Boolam } format 如果为时间格式字符串,超出一定时间范围,返回固定的时间格式 || 如果为布尔值false,无论什么时间,都返回多久以前的格式\r\n * @returns \r\n */\r\nfunction timeForm(dateTime = null, format = 'yyyy-mm-dd') {\r\n // 如果为null,则格式化当前时间\r\n if (!dateTime) dateTime = Number(new Date());\r\n // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式\r\n if (dateTime.toString().length === 10) dateTime *= 1000\r\n\r\n let timestamp = new Date(Number(dateTime))\r\n let timer = (Number(new Date()) - timestamp) / 1000;\r\n\r\n // 如果小于5分钟,则返回\"刚刚\",其他以此类推\r\n let tips = '';\r\n switch (true) {\r\n case timer < 300:\r\n tips = '刚刚';\r\n break;\r\n case timer >= 300 && timer < 3600:\r\n tips = parseInt(timer / 60) + '分钟前';\r\n break;\r\n case timer >= 3600 && timer < 86400:\r\n tips = parseInt(timer / 3600) + '小时前';\r\n break;\r\n case timer >= 86400 && timer < 2592000:\r\n tips = parseInt(timer / 86400) + '天前';\r\n break;\r\n default:\r\n // 如果format为false,则无论什么时间戳,都显示xx之前\r\n if (format === false) {\r\n if (timer >= 2592000 && timer < 365 * 86400) {\r\n tips = parseInt(timer / (86400 * 30)) + '个月前';\r\n } else {\r\n tips = parseInt(timer / (86400 * 365)) + '年前';\r\n }\r\n } else {\r\n tips = (0,_timeFormat__WEBPACK_IMPORTED_MODULE_0__.timeFormat)(timestamp, format);\r\n }\r\n }\r\n return tips;\r\n}\n\n//# sourceURL=webpack://js-utils-chs/./src/time/timeFrom.js?");
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/****************************************