|
|
AIWROK°²×¿Æ»¹ûƽ̨Éè¼ÆµÄʵÓù¤¾ß¿â
- //🍎½»Á÷QQȺ711841924Ⱥһ£¬Æ»¹ûÄÚ²âȺ£¬528816639
- /**
- * =============================================================================
- * AIWROK ºËÐŤ¾ß¿âÍêÕûʾÀý
- * =============================================================================
- * »ùÓÚ JavaScript ES5 ±ê×¼£¬×¨Îª AIWROK ƽ̨Éè¼ÆµÄʵÓù¤¾ß¿â
- * °üº¬£º¶ÔÏó²Ù×÷¡¢Êý×é´¦Àí¡¢×Ö·û´®¹¤¾ß¡¢Êýѧ¼ÆËã¡¢Êý×Ö´¦Àí¡¢Ê±¼ä¹ÜÀí
- *
- * ¼æÈÝÐÔ£ºRhino ÒýÇæ (ES5)
- * ƽ̨£ºAIWROK °²×¿×Ô¶¯»¯Èí¼þ
- * °æ±¾£º2.0.0
- * =============================================================================
- */
- // =============================================================================
- // µÚÒ»²¿·Ö£º¶ÔÏó²Ù×÷¹¤¾ßÀà (ObjectUtils)
- // =============================================================================
- /**
- * ¶ÔÏó²Ù×÷¹¤¾ßÀà
- * Ìṩ¶ÔÏó´´½¨¡¢ºÏ²¢¡¢¿Ë¡¡¢ÊôÐÔ²Ù×÷µÈ¸ß¼¶¹¦ÄÜ
- */
- var ObjectUtils = {
-
- /**
- * Éî¶ÈºÏ²¢¶à¸ö¶ÔÏó
- * @param {Object} target - Ä¿±ê¶ÔÏó
- * @param {...Object} sources - Ô´¶ÔÏóÁбí
- * @returns {Object} ºÏ²¢ºóµÄ¶ÔÏó
- */
- deepMerge: function(target) {
- var sources = Array.prototype.slice.call(arguments, 1);
- for (var i = 0; i < sources.length; i++) {
- var source = sources[i];
- if (source && typeof source === 'object') {
- for (var key in source) {
- if (source.hasOwnProperty(key)) {
- if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {
- target[key] = this.deepMerge(target[key] || {}, source[key]);
- } else {
- target[key] = source[key];
- }
- }
- }
- }
- }
- return target;
- },
-
- /**
- * ´´½¨¶ÔÏóµÄÉî¶È¿Ë¡
- * @param {Object} obj - Òª¿Ë¡µÄ¶ÔÏó
- * @returns {Object} ¿Ë¡ºóµÄжÔÏó
- */
- deepClone: function(obj) {
- if (obj === null || typeof obj !== 'object') {
- return obj;
- }
- if (Array.isArray(obj)) {
- var arrCopy = [];
- for (var i = 0; i < obj.length; i++) {
- arrCopy[i] = this.deepClone(obj[i]);
- }
- return arrCopy;
- }
- var objCopy = {};
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- objCopy[key] = this.deepClone(obj[key]);
- }
- }
- return objCopy;
- },
-
- /**
- * °²È«»ñȡǶÌ×¶ÔÏóÊôÐÔ
- * @param {Object} obj - Ä¿±ê¶ÔÏó
- * @param {string} path - ÊôÐÔ·¾¶£¬Èç "a.b.c"
- * @param {*} defaultValue - ĬÈÏÖµ
- * @returns {*} ÊôÐÔÖµ»òĬÈÏÖµ
- */
- getSafe: function(obj, path, defaultValue) {
- if (!obj || !path) return defaultValue;
- var keys = path.split('.');
- var current = obj;
- for (var i = 0; i < keys.length; i++) {
- if (current === null || current === undefined || !current.hasOwnProperty(keys[i])) {
- return defaultValue;
- }
- current = current[keys[i]];
- }
- return current !== undefined ? current : defaultValue;
- },
-
- /**
- * °²È«ÉèÖÃǶÌ×¶ÔÏóÊôÐÔ
- * @param {Object} obj - Ä¿±ê¶ÔÏó
- * @param {string} path - ÊôÐÔ·¾¶
- * @param {*} value - ÒªÉèÖõÄÖµ
- */
- setSafe: function(obj, path, value) {
- if (!obj || !path) return;
- var keys = path.split('.');
- var current = obj;
- for (var i = 0; i < keys.length - 1; i++) {
- if (!current[keys[i]] || typeof current[keys[i]] !== 'object') {
- current[keys[i]] = {};
- }
- current = current[keys[i]];
- }
- current[keys[keys.length - 1]] = value;
- },
-
- /**
- * ¹ýÂ˶ÔÏóÊôÐÔ
- * @param {Object} obj - Ô´¶ÔÏó
- * @param {Array} keys - Òª±£ÁôµÄ¼üÃûÊý×é
- * @returns {Object} ¹ýÂ˺óµÄ¶ÔÏó
- */
- pick: function(obj, keys) {
- var result = {};
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- if (obj.hasOwnProperty(key)) {
- result[key] = obj[key];
- }
- }
- return result;
- },
-
- /**
- * Åųý¶ÔÏóÊôÐÔ
- * @param {Object} obj - Ô´¶ÔÏó
- * @param {Array} keys - ÒªÅųýµÄ¼üÃûÊý×é
- * @returns {Object} ´¦ÀíºóµÄ¶ÔÏó
- */
- omit: function(obj, keys) {
- var result = {};
- var excludeMap = {};
- for (var i = 0; i < keys.length; i++) {
- excludeMap[keys[i]] = true;
- }
- for (var key in obj) {
- if (obj.hasOwnProperty(key) && !excludeMap[key]) {
- result[key] = obj[key];
- }
- }
- return result;
- },
-
- /**
- * ¼ì²é¶ÔÏóÊÇ·ñΪ¿Õ
- * @param {Object} obj - Òª¼ì²éµÄ¶ÔÏó
- * @returns {boolean} ÊÇ·ñΪ¿Õ
- */
- isEmpty: function(obj) {
- if (!obj) return true;
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) return false;
- }
- return true;
- },
-
- /**
- * ½«¶ÔÏóת»»Îª²éѯ×Ö·û´®
- * @param {Object} obj - Ҫת»»µÄ¶ÔÏó
- * @returns {string} ²éѯ×Ö·û´®
- */
- toQueryString: function(obj) {
- var pairs = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
- }
- }
- return pairs.join('&');
- },
-
- /**
- * ½«²éѯ×Ö·û´®×ª»»Îª¶ÔÏó
- * @param {string} queryString - ²éѯ×Ö·û´®
- * @returns {Object} ת»»ºóµÄ¶ÔÏó
- */
- fromQueryString: function(queryString) {
- var result = {};
- if (!queryString) return result;
- var pairs = queryString.split('&');
- for (var i = 0; i < pairs.length; i++) {
- var pair = pairs[i].split('=');
- if (pair.length === 2) {
- result[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
- }
- }
- return result;
- }
- };
- // =============================================================================
- // µÚ¶þ²¿·Ö£ºÊý×é²Ù×÷¹¤¾ßÀà (ArrayUtils)
- // =============================================================================
- /**
- * Êý×é²Ù×÷¹¤¾ßÀà
- * ÌṩÊý×é±éÀú¡¢¹ýÂË¡¢ÅÅÐò¡¢·Ö×éµÈ¸ß¼¶¹¦ÄÜ
- */
- var ArrayUtils = {
-
- /**
- * Êý×éÈ¥ÖØ
- * @param {Array} arr - Ô´Êý×é
- * @returns {Array} È¥ÖØºóµÄÊý×é
- */
- unique: function(arr) {
- var result = [];
- var seen = {};
- for (var i = 0; i < arr.length; i++) {
- var item = arr[i];
- var key = typeof item + JSON.stringify(item);
- if (!seen[key]) {
- seen[key] = true;
- result.push(item);
- }
- }
- return result;
- },
-
- /**
- * ¸ù¾ÝÌõ¼þ¹ýÂËÊý×é
- * @param {Array} arr - Ô´Êý×é
- * @param {Function} predicate - ¹ýÂËÌõ¼þº¯Êý
- * @returns {Array} ¹ýÂ˺óµÄÊý×é
- */
- filter: function(arr, predicate) {
- var result = [];
- for (var i = 0; i < arr.length; i++) {
- if (predicate(arr[i], i, arr)) {
- result.push(arr[i]);
- }
- }
- return result;
- },
-
- /**
- * Êý×éÓ³Éäת»»
- * @param {Array} arr - Ô´Êý×é
- * @param {Function} mapper - Ó³É亯Êý
- * @returns {Array} ת»»ºóµÄÊý×é
- */
- map: function(arr, mapper) {
- var result = [];
- for (var i = 0; i < arr.length; i++) {
- result.push(mapper(arr[i], i, arr));
- }
- return result;
- },
-
- /**
- * Êý×é¹éÔ¼¼ÆËã
- * @param {Array} arr - Ô´Êý×é
- * @param {Function} reducer - ¹éÔ¼º¯Êý
- * @param {*} initialValue - ³õʼֵ
- * @returns {*} ¹éÔ¼½á¹û
- */
- reduce: function(arr, reducer, initialValue) {
- var accumulator = initialValue;
- var startIndex = 0;
- if (arguments.length < 3) {
- accumulator = arr[0];
- startIndex = 1;
- }
- for (var i = startIndex; i < arr.length; i++) {
- accumulator = reducer(accumulator, arr[i], i, arr);
- }
- return accumulator;
- },
-
- /**
- * ²éÕÒÊý×éÔªËØ
- * @param {Array} arr - Ô´Êý×é
- * @param {Function} predicate - ²éÕÒÌõ¼þ
- * @returns {*} ÕÒµ½µÄÔªËØ»ò undefined
- */
- find: function(arr, predicate) {
- for (var i = 0; i < arr.length; i++) {
- if (predicate(arr[i], i, arr)) {
- return arr[i];
- }
- }
- return undefined;
- },
-
- /**
- * ¼ì²éÊý×éÊÇ·ñ°üº¬Ä³ÔªËØ
- * @param {Array} arr - Ô´Êý×é
- * @param {*} item - Òª²éÕÒµÄÔªËØ
- * @returns {boolean} ÊÇ·ñ°üº¬
- */
- includes: function(arr, item) {
- for (var i = 0; i < arr.length; i++) {
- if (arr[i] === item) {
- return true;
- }
- }
- return false;
- },
-
- /**
- * Êý×é±âƽ»¯
- * @param {Array} arr - Ô´Êý×é
- * @param {number} depth - ±âƽ»¯Éî¶È£¬Ä¬ÈÏΪ1
- * @returns {Array} ±âƽ»¯ºóµÄÊý×é
- */
- flatten: function(arr, depth) {
- depth = depth || 1;
- var result = [];
- for (var i = 0; i < arr.length; i++) {
- if (Array.isArray(arr[i]) && depth > 0) {
- result = result.concat(this.flatten(arr[i], depth - 1));
- } else {
- result.push(arr[i]);
- }
- }
- return result;
- },
-
- /**
- * Êý×é·Ö¿é
- * @param {Array} arr - Ô´Êý×é
- * @param {number} size - ÿ¿é´óС
- * @returns {Array} ·Ö¿éºóµÄÊý×é
- */
- chunk: function(arr, size) {
- var result = [];
- for (var i = 0; i < arr.length; i += size) {
- var chunk = [];
- for (var j = i; j < i + size && j < arr.length; j++) {
- chunk.push(arr[j]);
- }
- result.push(chunk);
- }
- return result;
- },
-
- /**
- * Êý×éÅÅÐò£¨Ö§³Ö¶à×Ö¶ÎÅÅÐò£©
- * @param {Array} arr - Ô´Êý×é
- * @param {string|Array} fields - ÅÅÐò×Ö¶Î
- * @param {string|Array} orders - ÅÅÐò·½Ê½ ('asc' »ò 'desc')
- * @returns {Array} ÅÅÐòºóµÄÊý×é
- */
- orderBy: function(arr, fields, orders) {
- if (!Array.isArray(fields)) {
- fields = [fields];
- }
- if (!Array.isArray(orders)) {
- orders = [orders || 'asc'];
- }
- return arr.slice().sort(function(a, b) {
- for (var i = 0; i < fields.length; i++) {
- var field = fields[i];
- var order = orders[i] || 'asc';
- var aVal = a[field];
- var bVal = b[field];
- if (aVal < bVal) return order === 'asc' ? -1 : 1;
- if (aVal > bVal) return order === 'asc' ? 1 : -1;
- }
- return 0;
- });
- },
-
- /**
- * Êý×é·Ö×é
- * @param {Array} arr - Ô´Êý×é
- * @param {Function|string} grouper - ·Ö×éÒÀ¾Ý£¨º¯Êý»òÊôÐÔÃû£©
- * @returns {Object} ·Ö×éºóµÄ¶ÔÏó
- */
- groupBy: function(arr, grouper) {
- var result = {};
- var isFunction = typeof grouper === 'function';
- for (var i = 0; i < arr.length; i++) {
- var key = isFunction ? grouper(arr[i], i, arr) : arr[i][grouper];
- if (!result[key]) {
- result[key] = [];
- }
- result[key].push(arr[i]);
- }
- return result;
- },
-
- /**
- * ´ÓÊý×éÖÐËæ»úȡһ¸öÔªËØ
- * @param {Array} arr - Ô´Êý×é
- * @returns {*} Ëæ»úÔªËØ
- */
- sample: function(arr) {
- if (arr.length === 0) return undefined;
- return arr[Math.floor(Math.random() * arr.length)];
- },
-
- /**
- * ´òÂÒÊý×é˳Ðò£¨Fisher-YatesËã·¨£©
- * @param {Array} arr - Ô´Êý×é
- * @returns {Array} ´òÂÒºóµÄÊý×é
- */
- shuffle: function(arr) {
- var result = arr.slice();
- for (var i = result.length - 1; i > 0; i--) {
- var j = Math.floor(Math.random() * (i + 1));
- var temp = result[i];
- result[i] = result[j];
- result[j] = temp;
- }
- return result;
- }
- };
- // =============================================================================
- // µÚÈý²¿·Ö£º×Ö·û´®²Ù×÷¹¤¾ßÀà (StringUtils)
- // =============================================================================
- /**
- * ×Ö·û´®²Ù×÷¹¤¾ßÀà
- * Ìṩ×Ö·û´®¸ñʽ»¯¡¢ÑéÖ¤¡¢×ª»»µÈ¸ß¼¶¹¦ÄÜ
- */
- var StringUtils = {
-
- /**
- * ¼ì²é×Ö·û´®ÊÇ·ñΪ¿Õ»ò¿Õ°×
- * @param {string} str - Òª¼ì²éµÄ×Ö·û´®
- * @returns {boolean} ÊÇ·ñΪ¿Õ
- */
- isEmpty: function(str) {
- return !str || str.trim().length === 0;
- },
-
- /**
- * ×Ö·û´®·´×ª
- * @param {string} str - Ô´×Ö·û´®
- * @returns {string} ·´×ªºóµÄ×Ö·û´®
- */
- reverse: function(str) {
- return str.split('').reverse().join('');
- },
-
- /**
- * ½ØÈ¡×Ö·û´®£¨Ö§³Ö¸ºÊýË÷Òý£©
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} start - ¿ªÊ¼Î»ÖÃ
- * @param {number} end - ½áÊøÎ»ÖÃ
- * @returns {string} ½ØÈ¡ºóµÄ×Ö·û´®
- */
- slice: function(str, start, end) {
- var len = str.length;
- start = start < 0 ? Math.max(0, len + start) : Math.min(start, len);
- end = end === undefined ? len : (end < 0 ? Math.max(0, len + end) : Math.min(end, len));
- var result = '';
- for (var i = start; i < end; i++) {
- result += str[i];
- }
- return result;
- },
-
- /**
- * Ìî³ä×Ö·û´®µ½Ö¸¶¨³¤¶È
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} length - Ä¿±ê³¤¶È
- * @param {string} chars - Ìî³ä×Ö·û
- * @param {boolean} left - ÊÇ·ñ×óÌî³ä
- * @returns {string} Ìî³äºóµÄ×Ö·û´®
- */
- pad: function(str, length, chars, left) {
- chars = chars || ' ';
- if (str.length >= length) return str;
- var padLength = length - str.length;
- var padStr = '';
- while (padStr.length < padLength) {
- padStr += chars;
- }
- padStr = this.slice(padStr, 0, padLength);
- return left ? padStr + str : str + padStr;
- },
-
- /**
- * ×óÌî³ä×Ö·û´®
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} length - Ä¿±ê³¤¶È
- * @param {string} chars - Ìî³ä×Ö·û
- * @returns {string} Ìî³äºóµÄ×Ö·û´®
- */
- padStart: function(str, length, chars) {
- return this.pad(str, length, chars, true);
- },
-
- /**
- * ÓÒÌî³ä×Ö·û´®
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} length - Ä¿±ê³¤¶È
- * @param {string} chars - Ìî³ä×Ö·û
- * @returns {string} Ìî³äºóµÄ×Ö·û´®
- */
- padEnd: function(str, length, chars) {
- return this.pad(str, length, chars, false);
- },
-
- /**
- * ÖØ¸´×Ö·û´®
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} count - ÖØ¸´´ÎÊý
- * @returns {string} ÖØ¸´ºóµÄ×Ö·û´®
- */
- repeat: function(str, count) {
- if (count < 0) return '';
- var result = '';
- for (var i = 0; i < count; i++) {
- result += str;
- }
- return result;
- },
-
- /**
- * ½Ø¶Ï×Ö·û´®²¢Ìí¼ÓÊ¡ÂÔºÅ
- * @param {string} str - Ô´×Ö·û´®
- * @param {number} length - ×î´ó³¤¶È
- * @param {string} omission - Ê¡ÂÔ·ûºÅ
- * @returns {string} ½Ø¶ÏºóµÄ×Ö·û´®
- */
- truncate: function(str, length, omission) {
- omission = omission || '...';
- if (str.length <= length) return str;
- return this.slice(str, 0, length - omission.length) + omission;
- },
-
- /**
- * ÍÕ·åÃüÃûתÏ»®ÏßÃüÃû
- * @param {string} str - ÍÕ·åÃüÃû×Ö·û´®
- * @returns {string} Ï»®ÏßÃüÃû×Ö·û´®
- */
- camelToSnake: function(str) {
- return str.replace(/([A-Z])/g, '_$1').toLowerCase().replace(/^_/, '');
- },
-
- /**
- * Ï»®ÏßÃüÃûתÍÕ·åÃüÃû
- * @param {string} str - Ï»®ÏßÃüÃû×Ö·û´®
- * @returns {string} ÍÕ·åÃüÃû×Ö·û´®
- */
- snakeToCamel: function(str) {
- return str.replace(/_([a-z])/g, function(match, letter) {
- return letter.toUpperCase();
- });
- },
-
- /**
- * Ê××Öĸ´óд
- * @param {string} str - Ô´×Ö·û´®
- * @returns {string} ´¦ÀíºóµÄ×Ö·û´®
- */
- capitalize: function(str) {
- if (this.isEmpty(str)) return str;
- return str[0].toUpperCase() + this.slice(str, 1).toLowerCase();
- },
-
- /**
- * ¼ì²é×Ö·û´®ÊÇ·ñÒÔÖ¸¶¨Ç°×º¿ªÍ·
- * @param {string} str - Ô´×Ö·û´®
- * @param {string} prefix - ǰ׺
- * @returns {boolean} ÊÇ·ñÒÔ¸Ãǰ׺¿ªÍ·
- */
- startsWith: function(str, prefix) {
- if (prefix.length > str.length) return false;
- return this.slice(str, 0, prefix.length) === prefix;
- },
-
- /**
- * ¼ì²é×Ö·û´®ÊÇ·ñÒÔÖ¸¶¨ºó׺½áβ
- * @param {string} str - Ô´×Ö·û´®
- * @param {string} suffix - ºó׺
- * @returns {boolean} ÊÇ·ñÒԸúó׺½áβ
- */
- endsWith: function(str, suffix) {
- if (suffix.length > str.length) return false;
- return this.slice(str, str.length - suffix.length) === suffix;
- },
-
- /**
- * ÒÆ³ý×Ö·û´®ÖеĿհ××Ö·û
- * @param {string} str - Ô´×Ö·û´®
- * @returns {string} ´¦ÀíºóµÄ×Ö·û´®
- */
- removeWhitespace: function(str) {
- var result = '';
- for (var i = 0; i < str.length; i++) {
- if (str[i] !== ' ' && str[i] !== '\t' && str[i] !== '\n' && str[i] !== '\r') {
- result += str[i];
- }
- }
- return result;
- },
-
- /**
- * ͳ¼Æ×Ö·û³öÏÖ´ÎÊý
- * @param {string} str - Ô´×Ö·û´®
- * @param {string} char - Ҫͳ¼ÆµÄ×Ö·û
- * @returns {number} ³öÏÖ´ÎÊý
- */
- countChar: function(str, char) {
- var count = 0;
- for (var i = 0; i < str.length; i++) {
- if (str[i] === char) count++;
- }
- return count;
- },
-
- /**
- * Éú³ÉËæ»ú×Ö·û´®
- * @param {number} length - ×Ö·û´®³¤¶È
- * @param {string} chars - ×Ö·û¼¯
- * @returns {string} Ëæ»ú×Ö·û´®
- */
- random: function(length, chars) {
- chars = chars || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- var result = '';
- for (var i = 0; i < length; i++) {
- result += chars.charAt(Math.floor(Math.random() * chars.length));
- }
- return result;
- }
- };
- // =============================================================================
- // µÚËIJ¿·Ö£ºÊýѧ¼ÆË㹤¾ßÀà (MathUtils)
- // =============================================================================
- /**
- * Êýѧ¼ÆË㹤¾ßÀà
- * ÌṩÊýÖµ¼ÆËã¡¢Ëæ»úÊýÉú³É¡¢¼¸ºÎ¼ÆËãµÈ¸ß¼¶¹¦ÄÜ
- */
- var MathUtils = {
-
- /**
- * ½Ç¶Èת»¡¶È
- * @param {number} degrees - ½Ç¶ÈÖµ
- * @returns {number} »¡¶ÈÖµ
- */
- toRadians: function(degrees) {
- return degrees * (Math.PI / 180);
- },
-
- /**
- * »¡¶Èת½Ç¶È
- * @param {number} radians - »¡¶ÈÖµ
- * @returns {number} ½Ç¶ÈÖµ
- */
- toDegrees: function(radians) {
- return radians * (180 / Math.PI);
- },
-
- /**
- * ÏÞÖÆÊýÖµÔÚÖ¸¶¨·¶Î§ÄÚ
- * @param {number} value - ÒªÏÞÖÆµÄÊýÖµ
- * @param {number} min - ×îСֵ
- * @param {number} max - ×î´óÖµ
- * @returns {number} ÏÞÖÆºóµÄÊýÖµ
- */
- clamp: function(value, min, max) {
- return Math.min(Math.max(value, min), max);
- },
-
- /**
- * ÏßÐÔ²åÖµ
- * @param {number} start - Æðʼֵ
- * @param {number} end - ½áÊøÖµ
- * @param {number} t - ²åֵϵÊý (0-1)
- * @returns {number} ²åÖµ½á¹û
- */
- lerp: function(start, end, t) {
- return start + (end - start) * t;
- },
-
- /**
- * Á½µã¼ä¾àÀë
- * @param {number} x1 - µÚÒ»µãX×ø±ê
- * @param {number} y1 - µÚÒ»µãY×ø±ê
- * @param {number} x2 - µÚ¶þµãX×ø±ê
- * @param {number} y2 - µÚ¶þµãY×ø±ê
- * @returns {number} ¾àÀë
- */
- distance: function(x1, y1, x2, y2) {
- var dx = x2 - x1;
- var dy = y2 - y1;
- return Math.sqrt(dx * dx + dy * dy);
- },
-
- /**
- * ¼ÆËãÁ½µã¼ä½Ç¶È
- * @param {number} x1 - µÚÒ»µãX×ø±ê
- * @param {number} y1 - µÚÒ»µãY×ø±ê
- * @param {number} x2 - µÚ¶þµãX×ø±ê
- * @param {number} y2 - µÚ¶þµãY×ø±ê
- * @returns {number} ½Ç¶È£¨¶È£©
- */
- angle: function(x1, y1, x2, y2) {
- return this.toDegrees(Math.atan2(y2 - y1, x2 - x1));
- },
-
- /**
- * Éú³ÉÖ¸¶¨·¶Î§ÄÚµÄËæ»úÕûÊý
- * @param {number} min - ×îСֵ£¨°üº¬£©
- * @param {number} max - ×î´óÖµ£¨°üº¬£©
- * @returns {number} Ëæ»úÕûÊý
- */
- randomInt: function(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- },
-
- /**
- * Éú³ÉÖ¸¶¨·¶Î§ÄÚµÄËæ»ú¸¡µãÊý
- * @param {number} min - ×îСֵ
- * @param {number} max - ×î´óÖµ
- * @returns {number} Ëæ»ú¸¡µãÊý
- */
- randomFloat: function(min, max) {
- return Math.random() * (max - min) + min;
- },
-
- /**
- * ÅжϵãÊÇ·ñÔÚ¾ØÐÎÄÚ
- * @param {number} px - µãX×ø±ê
- * @param {number} py - µãY×ø±ê
- * @param {number} rx - ¾ØÐÎ×óÉϽÇX×ø±ê
- * @param {number} ry - ¾ØÐÎ×óÉϽÇY×ø±ê
- * @param {number} rw - ¾ØÐοí¶È
- * @param {number} rh - ¾ØÐθ߶È
- * @returns {boolean} ÊÇ·ñÔÚ¾ØÐÎÄÚ
- */
- pointInRect: function(px, py, rx, ry, rw, rh) {
- return px >= rx && px <= rx + rw && py >= ry && py <= ry + rh;
- },
-
- /**
- * ÅжϵãÊÇ·ñÔÚÔ²ÄÚ
- * @param {number} px - µãX×ø±ê
- * @param {number} py - µãY×ø±ê
- * @param {number} cx - Ô²ÐÄX×ø±ê
- * @param {number} cy - Ô²ÐÄY×ø±ê
- * @param {number} radius - Ô²°ë¾¶
- * @returns {boolean} ÊÇ·ñÔÚÔ²ÄÚ
- */
- pointInCircle: function(px, py, cx, cy, radius) {
- return this.distance(px, py, cx, cy) <= radius;
- },
-
- /**
- * ¼ÆËãÆ½¾ùÖµ
- * @param {...number} numbers - ÊýÖµÁбí
- * @returns {number} ƽ¾ùÖµ
- */
- average: function() {
- var sum = 0;
- for (var i = 0; i < arguments.length; i++) {
- sum += arguments[i];
- }
- return sum / arguments.length;
- },
-
- /**
- * ¼ÆËã±ê×¼²î
- * @param {Array} numbers - ÊýÖµÊý×é
- * @returns {number} ±ê×¼²î
- */
- standardDeviation: function(numbers) {
- var avg = this.average.apply(this, numbers);
- var sumSquaredDiff = 0;
- for (var i = 0; i < numbers.length; i++) {
- var diff = numbers[i] - avg;
- sumSquaredDiff += diff * diff;
- }
- return Math.sqrt(sumSquaredDiff / numbers.length);
- },
-
- /**
- * ÅжÏÁ½¸ö¾ØÐÎÊÇ·ñÏཻ
- * @param {Object} rect1 - µÚÒ»¸ö¾ØÐÎ {x, y, width, height}
- * @param {Object} rect2 - µÚ¶þ¸ö¾ØÐÎ {x, y, width, height}
- * @returns {boolean} ÊÇ·ñÏཻ
- */
- rectIntersect: function(rect1, rect2) {
- return !(rect2.x > rect1.x + rect1.width ||
- rect2.x + rect2.width < rect1.x ||
- rect2.y > rect1.y + rect1.height ||
- rect2.y + rect2.height < rect1.y);
- },
-
- /**
- * ¼ÆËã½×³Ë
- * @param {number} n - ·Ç¸ºÕûÊý
- * @returns {number} ½×³Ë½á¹û
- */
- factorial: function(n) {
- if (n < 0) return NaN;
- if (n === 0 || n === 1) return 1;
- var result = 1;
- for (var i = 2; i <= n; i++) {
- result *= i;
- }
- return result;
- },
-
- /**
- * ¼ÆËã×éºÏÊý C(n, k)
- * @param {number} n - ×ÜÊý
- * @param {number} k - ѡȡÊý
- * @returns {number} ×éºÏÊý
- */
- combination: function(n, k) {
- if (k > n) return 0;
- if (k === 0 || k === n) return 1;
- return this.factorial(n) / (this.factorial(k) * this.factorial(n - k));
- }
- };
- // =============================================================================
- // µÚÎ岿·Ö£ºÊý×Ö´¦Àí¹¤¾ßÀà (NumberUtils)
- // =============================================================================
- /**
- * Êý×Ö´¦Àí¹¤¾ßÀà
- * ÌṩÊý×Ö¸ñʽ»¯¡¢×ª»»¡¢ÑéÖ¤µÈ¸ß¼¶¹¦ÄÜ
- */
- var NumberUtils = {
-
- /**
- * ½«Êý×Ö¸ñʽ»¯ÎªÇ§·Öλ×Ö·û´®
- * @param {number} num - Òª¸ñʽ»¯µÄÊý×Ö
- * @param {number} decimals - СÊýλÊý
- * @returns {string} ¸ñʽ»¯ºóµÄ×Ö·û´®
- */
- formatThousands: function(num, decimals) {
- decimals = decimals !== undefined ? decimals : 2;
- var fixed = num.toFixed(decimals);
- var parts = fixed.split('.');
- var integerPart = parts[0];
- var decimalPart = parts[1] || '';
- var result = '';
- var count = 0;
- for (var i = integerPart.length - 1; i >= 0; i--) {
- result = integerPart[i] + result;
- count++;
- if (count % 3 === 0 && i > 0 && integerPart[i - 1] !== '-') {
- result = ',' + result;
- }
- }
- return decimalPart ? result + '.' + decimalPart : result;
- },
-
- /**
- * ½«×Ö½ÚÊýת»»Îª¿É¶Á¸ñʽ
- * @param {number} bytes - ×Ö½ÚÊý
- * @param {number} decimals - СÊýλÊý
- * @returns {string} ¿É¶Á¸ñʽ×Ö·û´®
- */
- formatBytes: function(bytes, decimals) {
- decimals = decimals !== undefined ? decimals : 2;
- if (bytes === 0) return '0 Bytes';
- var k = 1024;
- var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
- var i = Math.floor(Math.log(bytes) / Math.log(k));
- return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];
- },
-
- /**
- * ½«ºÁÃëת»»Îª¿É¶Áʱ¼ä
- * @param {number} ms - ºÁÃëÊý
- * @returns {string} ¿É¶Áʱ¼ä×Ö·û´®
- */
- formatDuration: function(ms) {
- if (ms < 1000) return ms + 'ms';
- var seconds = Math.floor(ms / 1000);
- if (seconds < 60) return seconds + 's';
- var minutes = Math.floor(seconds / 60);
- if (minutes < 60) return minutes + 'm ' + (seconds % 60) + 's';
- var hours = Math.floor(minutes / 60);
- return hours + 'h ' + (minutes % 60) + 'm';
- },
-
- /**
- * ¼ì²éÊÇ·ñΪÕûÊý
- * @param {*} value - Òª¼ì²éµÄÖµ
- * @returns {boolean} ÊÇ·ñΪÕûÊý
- */
- isInteger: function(value) {
- return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
- },
-
- /**
- * ¼ì²éÊÇ·ñΪÊý×Ö
- * @param {*} value - Òª¼ì²éµÄÖµ
- * @returns {boolean} ÊÇ·ñΪÊý×Ö
- */
- isNumber: function(value) {
- return typeof value === 'number' && isFinite(value);
- },
-
- /**
- * ½«×Ö·û´®×ª»»ÎªÊý×Ö
- * @param {string} str - Ҫת»»µÄ×Ö·û´®
- * @param {*} defaultValue - ת»»Ê§°ÜʱµÄĬÈÏÖµ
- * @returns {number} ת»»ºóµÄÊý×Ö
- */
- toNumber: function(str, defaultValue) {
- var num = parseFloat(str);
- return isNaN(num) ? defaultValue : num;
- },
-
- /**
- * ½«Êý×Öת»»ÎªÖÐÎÄ´óд½ð¶î
- * @param {number} num - Ҫת»»µÄÊý×Ö
- * @returns {string} ÖÐÎÄ´óд½ð¶î
- */
- toChineseMoney: function(num) {
- var units = ['', 'Ê®', '°Ù', 'ǧ'];
- var bigUnits = ['', 'Íò', 'ÒÚ'];
- var digits = ['Áã', 'Ò»', '¶þ', 'Èý', 'ËÄ', 'Îå', 'Áù', 'Æß', '°Ë', '¾Å'];
-
- if (num === 0) return 'Áã';
- if (num < 0) return '¸º' + this.toChineseMoney(-num);
-
- var strNum = Math.floor(num).toString();
- var result = '';
- var zeroCount = 0;
- var bigUnitIndex = 0;
-
- for (var i = strNum.length - 1; i >= 0; i -= 4) {
- var part = '';
- var partZero = true;
- for (var j = 0; j < 4 && i - j >= 0; j++) {
- var digit = parseInt(strNum[i - j]);
- if (digit === 0) {
- zeroCount++;
- } else {
- if (zeroCount > 0) {
- part = digits[0] + part;
- zeroCount = 0;
- }
- part = digits[digit] + units[j] + part;
- partZero = false;
- }
- }
- if (!partZero) {
- result = part + bigUnits[bigUnitIndex] + result;
- }
- bigUnitIndex++;
- }
-
- return result.replace(/Áã+/g, 'Áã').replace(/Áã$/, '');
- },
-
- /**
- * ½«Êý×Öת»»ÎªÂÞÂíÊý×Ö
- * @param {number} num - Ҫת»»µÄÊý×Ö (1-3999)
- * @returns {string} ÂÞÂíÊý×Ö
- */
- toRoman: function(num) {
- if (num < 1 || num > 3999) return '';
- var values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
- var symbols = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
- var result = '';
- for (var i = 0; i < values.length; i++) {
- while (num >= values[i]) {
- result += symbols[i];
- num -= values[i];
- }
- }
- return result;
- },
-
- /**
- * ½«ÂÞÂíÊý×Öת»»ÎªÊý×Ö
- * @param {string} roman - ÂÞÂíÊý×Ö
- * @returns {number} ת»»ºóµÄÊý×Ö
- */
- fromRoman: function(roman) {
- var values = {I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000};
- var result = 0;
- for (var i = 0; i < roman.length; i++) {
- var current = values[roman[i]];
- var next = values[roman[i + 1]];
- if (next && current < next) {
- result -= current;
- } else {
- result += current;
- }
- }
- return result;
- },
-
- /**
- * Éú³ÉÖ¸¶¨·¶Î§ÄÚµÄËæ»úÊýÊý×é
- * @param {number} count - Êý×鳤¶È
- * @param {number} min - ×îСֵ
- * @param {number} max - ×î´óÖµ
- * @returns {Array} Ëæ»úÊýÊý×é
- */
- randomArray: function(count, min, max) {
- var result = [];
- for (var i = 0; i < count; i++) {
- result.push(MathUtils.randomInt(min, max));
- }
- return result;
- }
- };
- // =============================================================================
- // µÚÁù²¿·Ö£ºÊ±¼ä¹ÜÀí¹¤¾ßÀà (TimeUtils)
- // =============================================================================
- /**
- * ʱ¼ä¹ÜÀí¹¤¾ßÀà
- * ÌṩÈÕÆÚʱ¼ä¸ñʽ»¯¡¢¼ÆË㡢ת»»µÈ¸ß¼¶¹¦ÄÜ
- */
- var TimeUtils = {
-
- /**
- * ¸ñʽ»¯ÈÕÆÚʱ¼ä
- * @param {Date} date - ÈÕÆÚ¶ÔÏó
- * @param {string} format - ¸ñʽ×Ö·û´® (yyyy-MM-dd HH:mm:ss)
- * @returns {string} ¸ñʽ»¯ºóµÄ×Ö·û´®
- */
- format: function(date, format) {
- format = format || 'yyyy-MM-dd HH:mm:ss';
- var year = date.getFullYear();
- var month = date.getMonth() + 1;
- var day = date.getDate();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- var seconds = date.getSeconds();
- var milliseconds = date.getMilliseconds();
-
- return format
- .replace(/yyyy/g, year)
- .replace(/MM/g, StringUtils.padStart(month.toString(), 2, '0'))
- .replace(/dd/g, StringUtils.padStart(day.toString(), 2, '0'))
- .replace(/HH/g, StringUtils.padStart(hours.toString(), 2, '0'))
- .replace(/mm/g, StringUtils.padStart(minutes.toString(), 2, '0'))
- .replace(/ss/g, StringUtils.padStart(seconds.toString(), 2, '0'))
- .replace(/SSS/g, StringUtils.padStart(milliseconds.toString(), 3, '0'));
- },
-
- /**
- * »ñÈ¡µ±Ç°Ê±¼ä×Ö·û´®
- * @param {string} format - ¸ñʽ×Ö·û´®
- * @returns {string} µ±Ç°Ê±¼ä×Ö·û´®
- */
- now: function(format) {
- return this.format(new Date(), format);
- },
-
- /**
- * »ñÈ¡½ñÌìµÄ¿ªÊ¼Ê±¼ä
- * @returns {Date} ½ñÌìµÄ¿ªÊ¼Ê±¼ä
- */
- startOfDay: function() {
- var date = new Date();
- date.setHours(0, 0, 0, 0);
- return date;
- },
-
- /**
- * »ñÈ¡½ñÌìµÄ½áÊøÊ±¼ä
- * @returns {Date} ½ñÌìµÄ½áÊøÊ±¼ä
- */
- endOfDay: function() {
- var date = new Date();
- date.setHours(23, 59, 59, 999);
- return date;
- },
-
- /**
- * Ìí¼Óʱ¼ä
- * @param {Date} date - ÔÈÕÆÚ
- * @param {number} amount - ÊýÁ¿
- * @param {string} unit - µ¥Î» (year, month, day, hour, minute, second)
- * @returns {Date} еÄÈÕÆÚ
- */
- add: function(date, amount, unit) {
- var result = new Date(date);
- switch (unit) {
- case 'year':
- result.setFullYear(result.getFullYear() + amount);
- break;
- case 'month':
- result.setMonth(result.getMonth() + amount);
- break;
- case 'day':
- result.setDate(result.getDate() + amount);
- break;
- case 'hour':
- result.setHours(result.getHours() + amount);
- break;
- case 'minute':
- result.setMinutes(result.getMinutes() + amount);
- break;
- case 'second':
- result.setSeconds(result.getSeconds() + amount);
- break;
- }
- return result;
- },
-
- /**
- * ¼ÆËãÁ½¸öÈÕÆÚÖ®¼äµÄ²îÖµ
- * @param {Date} date1 - µÚÒ»¸öÈÕÆÚ
- * @param {Date} date2 - µÚ¶þ¸öÈÕÆÚ
- * @param {string} unit - ·µ»Øµ¥Î» (ms, s, m, h, d)
- * @returns {number} ²îÖµ
- */
- diff: function(date1, date2, unit) {
- var diffMs = date2 - date1;
- switch (unit) {
- case 'ms': return diffMs;
- case 's': return Math.floor(diffMs / 1000);
- case 'm': return Math.floor(diffMs / (1000 * 60));
- case 'h': return Math.floor(diffMs / (1000 * 60 * 60));
- case 'd': return Math.floor(diffMs / (1000 * 60 * 60 * 24));
- default: return diffMs;
- }
- },
-
- /**
- * ÅжÏÊÇ·ñΪÈòÄê
- * @param {number} year - Äê·Ý
- * @returns {boolean} ÊÇ·ñΪÈòÄê
- */
- isLeapYear: function(year) {
- return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
- },
-
- /**
- * »ñȡԷÝÌìÊý
- * @param {number} year - Äê·Ý
- * @param {number} month - ÔÂ·Ý (1-12)
- * @returns {number} ÌìÊý
- */
- daysInMonth: function(year, month) {
- var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
- if (month === 2 && this.isLeapYear(year)) {
- return 29;
- }
- return days[month - 1];
- },
-
- /**
- * »ñÈ¡ÈÕÆÚÊÇÐÇÆÚ¼¸
- * @param {Date} date - ÈÕÆÚ
- * @returns {string} ÐÇÆÚ¼¸
- */
- dayOfWeek: function(date) {
- var days = ['ÐÇÆÚÈÕ', 'ÐÇÆÚÒ»', 'ÐÇÆÚ¶þ', 'ÐÇÆÚÈý', 'ÐÇÆÚËÄ', 'ÐÇÆÚÎå', 'ÐÇÆÚÁù'];
- return days[date.getDay()];
- },
-
- /**
- * »ñÈ¡ÈÕÆÚÊÇÒ»ÄêÖеĵڼ¸Ìì
- * @param {Date} date - ÈÕÆÚ
- * @returns {number} µÚ¼¸Ìì
- */
- dayOfYear: function(date) {
- var start = new Date(date.getFullYear(), 0, 0);
- var diff = date - start;
- return Math.floor(diff / (1000 * 60 * 60 * 24));
- },
-
- /**
- * »ñÈ¡ÈÕÆÚËùÔÚÖܵįðʼÈÕÆÚ
- * @param {Date} date - ÈÕÆÚ
- * @returns {Date} ÖÜÆðʼÈÕÆÚ£¨ÖÜÒ»£©
- */
- startOfWeek: function(date) {
- var result = new Date(date);
- var day = result.getDay();
- var diff = result.getDate() - day + (day === 0 ? -6 : 1);
- result.setDate(diff);
- result.setHours(0, 0, 0, 0);
- return result;
- },
-
- /**
- * µ¹¼ÆÊ±¸ñʽ»¯
- * @param {number} seconds - Ê£ÓàÃëÊý
- * @returns {string} ¸ñʽ»¯ºóµÄµ¹¼ÆÊ±
- */
- countdown: function(seconds) {
- var hours = Math.floor(seconds / 3600);
- var minutes = Math.floor((seconds % 3600) / 60);
- var secs = seconds % 60;
- return StringUtils.padStart(hours.toString(), 2, '0') + ':' +
- StringUtils.padStart(minutes.toString(), 2, '0') + ':' +
- StringUtils.padStart(secs.toString(), 2, '0');
- },
-
- /**
- * »ñÈ¡Ïà¶Ôʱ¼äÃèÊö
- * @param {Date} date - ÈÕÆÚ
- * @returns {string} Ïà¶Ôʱ¼äÃèÊö
- */
- fromNow: function(date) {
- var now = new Date();
- var diff = Math.floor((now - date) / 1000);
-
- if (diff < 60) return '¸Õ¸Õ';
- if (diff < 3600) return Math.floor(diff / 60) + 'ᅅ';
- if (diff < 86400) return Math.floor(diff / 3600) + 'Сʱǰ';
- if (diff < 604800) return Math.floor(diff / 86400) + 'Ììǰ';
- return this.format(date, 'yyyy-MM-dd');
- },
-
- /**
- * ½âÎöÈÕÆÚ×Ö·û´®
- * @param {string} str - ÈÕÆÚ×Ö·û´®
- * @returns {Date} ÈÕÆÚ¶ÔÏó
- */
- parse: function(str) {
- return new Date(str);
- },
-
- /**
- * »ñȡʱ¼ä´Á
- * @param {Date} date - ÈÕÆÚ¶ÔÏó£¬Ä¬ÈÏΪµ±Ç°Ê±¼ä
- * @returns {number} ʱ¼ä´Á
- */
- timestamp: function(date) {
- return (date || new Date()).getTime();
- },
-
- /**
- * ÐÝÃßÖ¸¶¨ºÁÃëÊý£¨×èÈûʽ£©
- * @param {number} ms - ºÁÃëÊý
- */
- sleep: function(ms) {
- var start = new Date().getTime();
- while (new Date().getTime() - start < ms) {
- // ×èÈûµÈ´ý
- }
- },
-
- /**
- * Éú³Éʱ¼ä·¶Î§Êý×é
- * @param {Date} start - ¿ªÊ¼ÈÕÆÚ
- * @param {Date} end - ½áÊøÈÕÆÚ
- * @param {string} unit - ²½½øµ¥Î» (day, week, month)
- * @returns {Array} ÈÕÆÚÊý×é
- */
- range: function(start, end, unit) {
- var result = [];
- var current = new Date(start);
- var endDate = new Date(end);
-
- while (current <= endDate) {
- result.push(new Date(current));
- switch (unit) {
- case 'day':
- current.setDate(current.getDate() + 1);
- break;
- case 'week':
- current.setDate(current.getDate() + 7);
- break;
- case 'month':
- current.setMonth(current.getMonth() + 1);
- break;
- }
- }
- return result;
- }
- };
- // =============================================================================
- // µÚÆß²¿·Ö£º×ÛºÏÑÝʾº¯Êý
- // =============================================================================
- /**
- * ÑÓ³Ùº¯Êý - ºÁÃë
- */
- function delay(ms) {
- var start = new Date().getTime();
- while (new Date().getTime() - start < ms) {}
- }
- /**
- * ÔËÐÐËùÓй¤¾ßÀàµÄÑÝʾ
- */
- function runAllDemos() {
- printl('');
- printl('¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[');
- printl('¨U AIWROK ºËÐŤ¾ß¿âÍêÕûʾÀý v2.0 ¨U');
- printl('¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a');
- printl('');
- delay(800);
-
- demoObjectUtils();
- delay(500);
- demoArrayUtils();
- delay(500);
- demoStringUtils();
- delay(500);
- demoMathUtils();
- delay(500);
- demoNumberUtils();
- delay(500);
- demoTimeUtils();
-
- printl('');
- printl('¨X¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨[');
- printl('¨U ✓ ËùÓÐÑÝʾÒÑÍê³É£¡ ¨U');
- printl('¨^¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨a');
- printl('');
- }
- /**
- * ¶ÔÏó²Ù×÷¹¤¾ßÀàÑÝʾ
- */
- function demoObjectUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ ObjectUtils - ¶ÔÏó²Ù×÷¹¤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. Éî¶ÈºÏ²¢ - ºÏ²¢¶à¸ö¶ÔÏ󣨰üº¬Ç¶Ì×¶ÔÏó£©');
- delay(300);
- var obj1 = { a: 1, b: { c: 2 } };
- var obj2 = { b: { d: 3 }, e: 4 };
- var merged = ObjectUtils.deepMerge({}, obj1, obj2);
- printl(' Ô´¶ÔÏó1: ' + JSON.stringify(obj1));
- delay(200);
- printl(' Ô´¶ÔÏó2: ' + JSON.stringify(obj2));
- delay(200);
- printl(' ºÏ²¢½á¹û: ' + JSON.stringify(merged));
- delay(500);
-
- printl('▶ 2. Éî¶È¿Ë¡ - ÍêÕû¸´ÖƶÔÏ󣨰üº¬Ç¶Ì×¶ÔÏó£©');
- delay(300);
- var original = { x: 1, y: { z: 2 } };
- var cloned = ObjectUtils.deepClone(original);
- printl(' Ô¶ÔÏó: ' + JSON.stringify(original));
- delay(200);
- printl(' ¿Ë¡: ' + JSON.stringify(cloned));
- delay(500);
-
- printl('▶ 3. °²È«»ñÈ¡ - »ñȡǶÌ×ÊôÐÔ£¬±ÜÃⱨ´í');
- delay(300);
- var data = { user: { profile: { name: 'ÕÅÈý' } } };
- var name = ObjectUtils.getSafe(data, 'user.profile.name', 'δ֪');
- printl(' Êý¾Ý: { user: { profile: { name: "ÕÅÈý" } } }');
- delay(200);
- printl(' ¶ÁÈ¡ user.profile.name: ' + name);
- delay(200);
- var noExist = ObjectUtils.getSafe(data, 'user.profile.age', 'ĬÈÏÖµ');
- printl(' ¶ÁÈ¡ user.profile.age£¨²»´æÔÚ£©: ' + noExist);
- delay(500);
-
- printl('▶ 4. ¶ÔÏóת²éѯ×Ö·û´®');
- delay(300);
- var params = { name: 'ÕÅÈý', age: 25 };
- var query = ObjectUtils.toQueryString(params);
- printl(' ¶ÔÏó: ' + JSON.stringify(params));
- delay(200);
- printl(' ²éѯ×Ö·û´®: ' + query);
- delay(500);
-
- printl('▶ 5. ²éѯ×Ö·û´®×ª¶ÔÏó');
- delay(300);
- var parsed = ObjectUtils.fromQueryString(query);
- printl(' ½âÎö½á¹û: ' + JSON.stringify(parsed));
- delay(500);
-
- printl('');
- }
- /**
- * Êý×é²Ù×÷¹¤¾ßÀàÑÝʾ
- */
- function demoArrayUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ ArrayUtils - Êý×é²Ù×÷¹¤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. Êý×éÈ¥ÖØ - ÒÆ³ýÖØ¸´ÔªËØ');
- delay(300);
- var arr1 = [1, 2, 2, 3, 3, 3, 4, 4, 5];
- printl(' ÔʼÊý×é: ' + JSON.stringify(arr1));
- delay(200);
- var unique = ArrayUtils.unique(arr1);
- printl(' È¥ÖØ½á¹û: ' + JSON.stringify(unique));
- delay(500);
-
- printl('▶ 2. Êý×é¹ýÂË - °´Ìõ¼þɸѡ');
- delay(300);
- var arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
- printl(' ÔʼÊý×é: ' + JSON.stringify(arr2));
- delay(200);
- var filtered = ArrayUtils.filter(arr2, function(x) { return x > 5; });
- printl(' ¹ýÂËÌõ¼þ: x > 5');
- printl(' ¹ýÂ˽á¹û: ' + JSON.stringify(filtered));
- delay(500);
-
- printl('▶ 3. Êý×éÓ³Éä - ת»»Ã¿¸öÔªËØ');
- delay(300);
- printl(' ÔʼÊý×é: ' + JSON.stringify(arr2));
- delay(200);
- var mapped = ArrayUtils.map(arr2, function(x) { return x * 2; });
- printl(' Ó³É乿Ôò: x * 2');
- printl(' Ó³Éä½á¹û: ' + JSON.stringify(mapped));
- delay(500);
-
- printl('▶ 4. Êý×é·Ö¿é - ½«Êý×é·Ö³É¶à¸öС¿é');
- delay(300);
- var arr3 = [1, 2, 3, 4, 5, 6];
- printl(' ÔʼÊý×é: ' + JSON.stringify(arr3));
- delay(200);
- var chunked = ArrayUtils.chunk(arr3, 2);
- printl(' ·Ö¿é´óС: 2');
- printl(' ·Ö¿é½á¹û: ' + JSON.stringify(chunked));
- delay(500);
-
- printl('▶ 5. Êý×éËæ»úÈ¡Ñù - Ëæ»ú³éÈ¡ÔªËØ');
- delay(300);
- var arr4 = ['Æ»¹û', 'Ïã½¶', '³È×Ó', 'ÆÏÌÑ', 'Î÷¹Ï'];
- printl(' Ë®¹ûÁбí: ' + JSON.stringify(arr4));
- delay(200);
- var sample = ArrayUtils.sample(arr4);
- printl(' Ëæ»ú³éÈ¡: ' + sample + ' 🎉');
- delay(500);
-
- printl('');
- }
- /**
- * ×Ö·û´®²Ù×÷¹¤¾ßÀàÑÝʾ
- */
- function demoStringUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ StringUtils - ×Ö·û´®²Ù×÷¹¤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. ×Ö·û´®Ìî³ä - ²¹ÆëλÊý');
- delay(300);
- var padded = StringUtils.padStart('42', 5, '0');
- printl(' Ô×Ö·û´®: "42"');
- printl(' Ä¿±ê³¤¶È: 5, Ìî³ä×Ö·û: "0"');
- printl(' Ìî³ä½á¹û: "' + padded + '"');
- delay(500);
-
- printl('▶ 2. ×Ö·û´®½Ø¶Ï - ÏÞÖÆ³¤¶È');
- delay(300);
- var longText = 'ÕâÊÇÒ»¶Î·Ç³£³¤µÄ×Ö·û´®£¬ÐèÒª½Ø¶ÏÏÔʾ';
- printl(' ÔÎÄ: ' + longText);
- delay(200);
- var truncated = StringUtils.truncate(longText, 15);
- printl(' ½Ø¶Ï³¤¶È: 15');
- printl(' ½Ø¶Ï½á¹û: ' + truncated);
- delay(500);
-
- printl('▶ 3. ÍÕ·åתÏ»®Ïß - ÃüÃû·ç¸ñת»»');
- delay(300);
- var camel = 'userNameAndPassword';
- printl(' ÍÕ·åÃüÃû: ' + camel);
- delay(200);
- var snake = StringUtils.camelToSnake(camel);
- printl(' Ï»®Ïß: ' + snake);
- delay(500);
-
- printl('▶ 4. Ê××Öĸ´óд');
- delay(300);
- var text = 'hello world';
- printl(' ÔÎÄ: ' + text);
- delay(200);
- var capitalized = StringUtils.capitalize(text);
- printl(' Ê××Öĸ´óд: ' + capitalized);
- delay(500);
-
- printl('▶ 5. Éú³ÉËæ»ú×Ö·û´®');
- delay(300);
- var random = StringUtils.random(12);
- printl(' Ëæ»ú×Ö·û´®(12λ): ' + random);
- delay(500);
-
- printl('');
- }
- /**
- * Êýѧ¼ÆË㹤¾ßÀàÑÝʾ
- */
- function demoMathUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ MathUtils - Êýѧ¼ÆË㹤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. ½Ç¶ÈÓ뻡¶Èת»»');
- delay(300);
- var degrees = 180;
- printl(' ½Ç¶È: ' + degrees + '¡ã');
- delay(200);
- var radians = MathUtils.toRadians(degrees);
- printl(' »¡¶È: ' + radians.toFixed(4));
- delay(500);
-
- printl('▶ 2. ÊýÖµ·¶Î§ÏÞÖÆ');
- delay(300);
- var testValue = 150;
- printl(' ²âÊÔÖµ: ' + testValue);
- delay(200);
- var clamped = MathUtils.clamp(testValue, 0, 100);
- printl(' ÏÞÖÆ·¶Î§: 0-100');
- printl(' ÏÞÖÆ½á¹û: ' + clamped);
- delay(500);
-
- printl('▶ 3. Á½µã¾àÀë¼ÆËã');
- delay(300);
- var x1 = 0, y1 = 0, x2 = 3, y2 = 4;
- printl(' µãA: (' + x1 + ', ' + y1 + ')');
- printl(' µãB: (' + x2 + ', ' + y2 + ')');
- delay(200);
- var distance = MathUtils.distance(x1, y1, x2, y2);
- printl(' ¾àÀë: ' + distance);
- delay(500);
-
- printl('▶ 4. Ëæ»úÕûÊýÉú³É');
- delay(300);
- var min = 1, max = 100;
- printl(' ·¶Î§: ' + min + ' - ' + max);
- delay(200);
- var randomInt = MathUtils.randomInt(min, max);
- printl(' Ëæ»úÕûÊý: ' + randomInt);
- delay(500);
-
- printl('▶ 5. ¼ÆËãÆ½¾ùÖµ');
- delay(300);
- var nums = [10, 20, 30, 40, 50];
- printl(' Êý×ÖÁбí: ' + JSON.stringify(nums));
- delay(200);
- var avg = MathUtils.average.apply(null, nums);
- printl(' ƽ¾ùÖµ: ' + avg);
- delay(500);
-
- printl('');
- }
- /**
- * Êý×Ö´¦Àí¹¤¾ßÀàÑÝʾ
- */
- function demoNumberUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ NumberUtils - Êý×Ö´¦Àí¹¤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. ǧ·Öλ¸ñʽ»¯ - ½ð¶îÏÔʾ');
- delay(300);
- var amount = 1234567.89;
- printl(' Ôʼ½ð¶î: ' + amount);
- delay(200);
- var formatted = NumberUtils.formatThousands(amount);
- printl(' ¸ñʽ»¯ºó: ¥' + formatted);
- delay(500);
-
- printl('▶ 2. ×Ö½Ú´óС¸ñʽ»¯ - Îļþ´óС');
- delay(300);
- var fileSize = 1536000;
- printl(' Ôʼ×Ö½Ú: ' + fileSize + ' bytes');
- delay(200);
- var bytes = NumberUtils.formatBytes(fileSize);
- printl(' ¸ñʽ»¯ºó: ' + bytes);
- delay(500);
-
- printl('▶ 3. ʱ³¤¸ñʽ»¯ - ÏÔʾÓѺõÄʱ¼ä');
- delay(300);
- var ms = 3661000;
- printl(' ÔʼºÁÃë: ' + ms);
- delay(200);
- var duration = NumberUtils.formatDuration(ms);
- printl(' ¸ñʽ»¯ºó: ' + duration);
- delay(500);
-
- printl('▶ 4. Êý×ÖתÖÐÎÄ´óд - ½ð¶îÏÔʾ');
- delay(300);
- var money = 12345;
- printl(' ÔʼÊý×Ö: ' + money);
- delay(200);
- var chinese = NumberUtils.toChineseMoney(money);
- printl(' ÖÐÎÄ´óд: ' + chinese);
- delay(500);
-
- printl('▶ 5. Êý×ÖתÂÞÂíÊý×Ö');
- delay(300);
- var year = 2024;
- printl(' ÔʼÊý×Ö: ' + year);
- delay(200);
- var roman = NumberUtils.toRoman(year);
- printl(' ÂÞÂíÊý×Ö: ' + roman);
- delay(500);
-
- printl('');
- }
- /**
- * ʱ¼ä¹ÜÀí¹¤¾ßÀàÑÝʾ
- */
- function demoTimeUtils() {
- printl('©°©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©´');
- printl('©¦ TimeUtils - ʱ¼ä¹ÜÀí¹¤¾ßÀà ©¦');
- printl('©¸©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¼');
- printl('');
- delay(400);
-
- printl('▶ 1. ʱ¼ä¸ñʽ»¯ - ×Ô¶¨Òå¸ñʽÏÔʾ');
- delay(300);
- var now = new Date();
- printl(' µ±Ç°Ê±¼ä: ' + TimeUtils.format(now, 'yyyy-MM-dd HH:mm:ss'));
- delay(200);
- printl(' ¼ò½à¸ñʽ: ' + TimeUtils.format(now, 'MM/dd HH:mm'));
- delay(500);
-
- printl('▶ 2. »ñÈ¡ÐÇÆÚ¼¸');
- delay(300);
- printl(' ½ñÌì: ' + TimeUtils.dayOfWeek(now));
- delay(500);
-
- printl('▶ 3. ½ñÄêµÚ¼¸Ìì');
- delay(300);
- printl(' ½ñÌìÊǽñÄêµÚ ' + TimeUtils.dayOfYear(now) + ' Ìì');
- delay(500);
-
- printl('▶ 4. µ¹¼ÆÊ±ÏÔʾ');
- delay(300);
- var countdownSeconds = 3665;
- printl(' ÔʼÃëÊý: ' + countdownSeconds);
- delay(200);
- var countdown = TimeUtils.countdown(countdownSeconds);
- printl(' µ¹¼ÆÊ±: ' + countdown);
- delay(500);
-
- printl('▶ 5. ÈÕÆÚ¼Ó¼õ¼ÆËã');
- delay(300);
- printl(' ½ñÌìÊÇ: ' + TimeUtils.format(now, 'yyyy-MM-dd'));
- delay(200);
- var future = TimeUtils.add(now, 7, 'day');
- printl(' 7Ììºó: ' + TimeUtils.format(future, 'yyyy-MM-dd'));
- delay(200);
- var past = TimeUtils.add(now, -3, 'day');
- printl(' 3Ììǰ: ' + TimeUtils.format(past, 'yyyy-MM-dd'));
- delay(500);
-
- printl('');
- }
- // Ö÷º¯ÊýÈë¿Ú£¨ÓÉ start.js µ÷Óã©
- function runMainDemo() {
- runAllDemos();
- }
- // ×¢Ò⣺²»ÔÚ´Ë´¦×Ô¶¯ÔËÐУ¬ÓÉ start.js ¿ØÖƵ÷ÓÃʱ»ú
- // ÈçÐèÖ±½ÓÔËÐд˽ű¾£¬È¡ÏûÏÂÃæÒ»ÐеÄ×¢ÊÍ
- runMainDemo();
¸´ÖÆ´úÂë
|
|