注册 登录
发贴工具
查看: 12|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK软件脚本JSON转换示例

[复制链接]

2545

主题

2593

帖子

1万

积分

积分
15444
跳转到指定楼层
楼主
AIWROK软件脚本JSON转换示例
AIWROK软件脚本JSON转换示例 群发软件发帖工具

  1. // AIWROK 实用工具集 - 完整示例 (ES5 兼容)
  2. // 包含:文件操作、网络请求、数据处理、UI交互等实用功能
  3. // ES5系统安卓 JavaScript引擎Rhino     
  4. //🍎交流QQ群711841924群一,苹果内测群,528816639


  5. // ==================== 1. 文件系统管理工具 ====================
  6. printl("=== 1. 文件系统管理工具 ===");

  7. function FileManager() {
  8.     this.basePath = '/sdcard/AIWROK/';
  9. }

  10. FileManager.prototype.createDirectory = function(path) {
  11.     try {
  12.         var fullPath = this.basePath + path;
  13.         // 模拟创建目录
  14.         printl("创建目录: " + fullPath);
  15.         return true;
  16.     } catch (e) {
  17.         printl("创建目录失败: " + e);
  18.         return false;
  19.     }
  20. };

  21. FileManager.prototype.writeFile = function(filename, content) {
  22.     try {
  23.         var fullPath = this.basePath + filename;
  24.         // 模拟写入文件
  25.         printl("写入文件: " + fullPath);
  26.         printl("内容长度: " + content.length);
  27.         return true;
  28.     } catch (e) {
  29.         printl("写入文件失败: " + e);
  30.         return false;
  31.     }
  32. };

  33. FileManager.prototype.readFile = function(filename) {
  34.     try {
  35.         var fullPath = this.basePath + filename;
  36.         // 模拟读取文件
  37.         printl("读取文件: " + fullPath);
  38.         return "模拟文件内容: " + filename;
  39.     } catch (e) {
  40.         printl("读取文件失败: " + e);
  41.         return null;
  42.     }
  43. };

  44. FileManager.prototype.listDirectory = function(path) {
  45.     try {
  46.         var fullPath = this.basePath + path;
  47.         // 模拟列出目录内容
  48.         printl("列出目录: " + fullPath);
  49.         return ['file1.txt', 'file2.json', 'subdir'];
  50.     } catch (e) {
  51.         printl("列出目录失败: " + e);
  52.         return [];
  53.     }
  54. };

  55. var fileManager = new FileManager();
  56. printl("FileManager实例已创建");

  57. // 演示文件操作
  58. fileManager.createDirectory('projects');
  59. fileManager.createDirectory('backups');
  60. fileManager.writeFile('config.json', '{"theme": "dark", "version": "1.0"}');
  61. fileManager.readFile('config.json');
  62. fileManager.listDirectory('projects');

  63. sleep.second(2); // 2秒延时

  64. // ==================== 2. 网络请求管理器 ====================
  65. printl("");
  66. printl("=== 2. 网络请求管理器 ===");

  67. function HttpClient() {
  68.     this.baseUrl = 'https://api.example.com';
  69.     this.headers = {
  70.         'Content-Type': 'application/json',
  71.         'User-Agent': 'AIWROK-Client/1.0'
  72.     };
  73. }

  74. HttpClient.prototype.get = function(endpoint, params) {
  75.     params = params || {};
  76.     var url = this.baseUrl + endpoint;
  77.    
  78.     // 添加查询参数
  79.     var queryString = '';
  80.     for (var key in params) {
  81.         if (params.hasOwnProperty(key)) {
  82.             queryString += (queryString ? '&' : '?') + key + '=' + encodeURIComponent(params[key]);
  83.         }
  84.     }
  85.    
  86.     printl("GET请求: " + (url + queryString));
  87.     printl("Headers: " + JSON.stringify(this.headers));
  88.    
  89.     // 模拟响应
  90.     return {
  91.         status: 200,
  92.         data: { message: '成功获取数据', endpoint: endpoint },
  93.         headers: { 'content-type': 'application/json' }
  94.     };
  95. };

  96. HttpClient.prototype.post = function(endpoint, data) {
  97.     var url = this.baseUrl + endpoint;
  98.    
  99.     printl("POST请求: " + url);
  100.     printl("请求数据: " + JSON.stringify(data));
  101.     printl("Headers: " + JSON.stringify(this.headers));
  102.    
  103.     // 模拟响应
  104.     return {
  105.         status: 201,
  106.         data: { message: '数据创建成功', id: Math.floor(Math.random() * 1000) },
  107.         headers: { 'content-type': 'application/json' }
  108.     };
  109. };

  110. HttpClient.prototype.put = function(endpoint, data) {
  111.     var url = this.baseUrl + endpoint;
  112.    
  113.     printl("PUT请求: " + url);
  114.     printl("更新数据: " + JSON.stringify(data));
  115.    
  116.     // 模拟响应
  117.     return {
  118.         status: 200,
  119.         data: { message: '数据更新成功' },
  120.         headers: { 'content-type': 'application/json' }
  121.     };
  122. };

  123. HttpClient.prototype.delete = function(endpoint) {
  124.     var url = this.baseUrl + endpoint;
  125.    
  126.     printl("DELETE请求: " + url);
  127.    
  128.     // 模拟响应
  129.     return {
  130.         status: 200,
  131.         data: { message: '数据删除成功' },
  132.         headers: { 'content-type': 'application/json' }
  133.     };
  134. };

  135. var httpClient = new HttpClient();
  136. printl("HttpClient实例已创建");

  137. // 演示网络请求
  138. var getUserResponse = httpClient.get('/users/123', { fields: 'name,email' });
  139. printl("GET响应状态: " + getUserResponse.status);
  140. printl("GET响应数据: " + JSON.stringify(getUserResponse.data));

  141. sleep.second(2); // 2秒延时

  142. var createUserResponse = httpClient.post('/users', {
  143.     name: '张三',
  144.     email: 'zhangsan@example.com',
  145.     age: 25
  146. });
  147. printl("POST响应状态: " + createUserResponse.status);
  148. printl("POST响应数据: " + JSON.stringify(createUserResponse.data));

  149. sleep.second(2); // 2秒延时

  150. // ==================== 3. 数据验证器 ====================
  151. printl("");
  152. printl("=== 3. 数据验证器 ===");

  153. function Validator() {}

  154. Validator.isEmail = function(email) {
  155.     var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  156.     return re.test(email);
  157. };

  158. Validator.isPhone = function(phone) {
  159.     var re = /^1[3-9]\d{9}$/;
  160.     return re.test(phone);
  161. };

  162. Validator.isURL = function(url) {
  163.     var re = /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
  164.     return re.test(url);
  165. };

  166. Validator.isEmpty = function(value) {
  167.     if (value === null || value === undefined) return true;
  168.     if (typeof value === 'string') return value.trim().length === 0;
  169.     if (Array.isArray(value)) return value.length === 0;
  170.     if (typeof value === 'object') return Object.keys(value).length === 0;
  171.     return false;
  172. };

  173. Validator.isNumber = function(value) {
  174.     return typeof value === 'number' && !isNaN(value);
  175. };

  176. Validator.isBoolean = function(value) {
  177.     return typeof value === 'boolean';
  178. };

  179. Validator.validateForm = function(formData, rules) {
  180.     var errors = {};
  181.     var isValid = true;
  182.    
  183.     for (var field in rules) {
  184.         if (rules.hasOwnProperty(field)) {
  185.             var rule = rules[field];
  186.             var value = formData[field];
  187.             
  188.             if (rule.required && Validator.isEmpty(value)) {
  189.                 errors[field] = rule.message || field + '不能为空';
  190.                 isValid = false;
  191.                 continue;
  192.             }
  193.             
  194.             if (!Validator.isEmpty(value)) {
  195.                 if (rule.type === 'email' && !Validator.isEmail(value)) {
  196.                     errors[field] = rule.message || field + '格式不正确';
  197.                     isValid = false;
  198.                 } else if (rule.type === 'phone' && !Validator.isPhone(value)) {
  199.                     errors[field] = rule.message || field + '格式不正确';
  200.                     isValid = false;
  201.                 } else if (rule.type === 'url' && !Validator.isURL(value)) {
  202.                     errors[field] = rule.message || field + '格式不正确';
  203.                     isValid = false;
  204.                 } else if (rule.minLength && value.length < rule.minLength) {
  205.                     errors[field] = rule.message || field + '长度不能少于' + rule.minLength;
  206.                     isValid = false;
  207.                 } else if (rule.maxLength && value.length > rule.maxLength) {
  208.                     errors[field] = rule.message || field + '长度不能超过' + rule.maxLength;
  209.                     isValid = false;
  210.                 }
  211.             }
  212.         }
  213.     }
  214.    
  215.     return {
  216.         isValid: isValid,
  217.         errors: errors
  218.     };
  219. };

  220. printl("Validator工具类已定义");

  221. // 演示数据验证
  222. var testData = {
  223.     email: 'test@example.com',
  224.     phone: '13800138000',
  225.     url: 'https://www.example.com',
  226.     empty: '',
  227.     number: 42,
  228.     boolean: true
  229. };

  230. printl("邮箱验证: " + Validator.isEmail(testData.email));
  231. printl("手机验证: " + Validator.isPhone(testData.phone));
  232. printl("URL验证: " + Validator.isURL(testData.url));
  233. printl("空值验证: " + Validator.isEmpty(testData.empty));
  234. printl("数字验证: " + Validator.isNumber(testData.number));
  235. printl("布尔验证: " + Validator.isBoolean(testData.boolean));

  236. sleep.second(2); // 2秒延时

  237. // 表单验证示例
  238. var formRules = {
  239.     username: { required: true, minLength: 3, maxLength: 20, message: '用户名3-20个字符' },
  240.     email: { required: true, type: 'email', message: '邮箱格式不正确' },
  241.     phone: { required: false, type: 'phone', message: '手机号格式不正确' }
  242. };

  243. var formData = {
  244.     username: 'john_doe',
  245.     email: 'john@example.com',
  246.     phone: '13800138000'
  247. };

  248. var validationResult = Validator.validateForm(formData, formRules);
  249. printl("表单验证结果: " + JSON.stringify(validationResult));

  250. sleep.second(2); // 2秒延时

  251. // ==================== 4. 缓存管理器 ====================
  252. printl("");
  253. printl("=== 4. 缓存管理器 ===");

  254. function CacheManager() {
  255.     this.cache = {};
  256.     this.ttl = {}; // time to live
  257. }

  258. CacheManager.prototype.set = function(key, value, ttlSeconds) {
  259.     ttlSeconds = ttlSeconds || 3600; // 默认1小时
  260.     this.cache[key] = value;
  261.     this.ttl[key] = Date.now() + (ttlSeconds * 1000);
  262.     printl("设置缓存: " + key + " TTL: " + ttlSeconds + " 秒");
  263. };

  264. CacheManager.prototype.get = function(key) {
  265.     if (!this.cache.hasOwnProperty(key)) {
  266.         return null;
  267.     }
  268.    
  269.     // 检查是否过期
  270.     if (Date.now() > this.ttl[key]) {
  271.         delete this.cache[key];
  272.         delete this.ttl[key];
  273.         printl("缓存已过期: " + key);
  274.         return null;
  275.     }
  276.    
  277.     printl("获取缓存: " + key);
  278.     return this.cache[key];
  279. };

  280. CacheManager.prototype.remove = function(key) {
  281.     if (this.cache.hasOwnProperty(key)) {
  282.         delete this.cache[key];
  283.         delete this.ttl[key];
  284.         printl("删除缓存: " + key);
  285.         return true;
  286.     }
  287.     return false;
  288. };

  289. CacheManager.prototype.clear = function() {
  290.     this.cache = {};
  291.     this.ttl = {};
  292.     printl("清空所有缓存");
  293. };

  294. CacheManager.prototype.size = function() {
  295.     return Object.keys(this.cache).length;
  296. };

  297. CacheManager.prototype.has = function(key) {
  298.     return this.cache.hasOwnProperty(key) && Date.now() <= this.ttl[key];
  299. };

  300. var cacheManager = new CacheManager();
  301. printl("CacheManager实例已创建");

  302. // 演示缓存操作
  303. cacheManager.set('user_profile', { name: '张三', age: 25 }, 300); // 5分钟TTL
  304. cacheManager.set('app_config', { theme: 'dark', language: 'zh-CN' }, 3600); // 1小时TTL

  305. printl("缓存大小: " + cacheManager.size());
  306. printl("是否存在user_profile: " + cacheManager.has('user_profile'));

  307. var userProfile = cacheManager.get('user_profile');
  308. printl("获取用户资料: " + JSON.stringify(userProfile));

  309. sleep.second(2); // 2秒延时

  310. cacheManager.remove('user_profile');
  311. printl("删除后缓存大小: " + cacheManager.size());

  312. cacheManager.clear();
  313. printl("清空后缓存大小: " + cacheManager.size());

  314. sleep.second(2); // 2秒延时

  315. // ==================== 5. 事件总线 ====================
  316. printl("");
  317. printl("=== 5. 事件总线 ===");

  318. function EventBus() {
  319.     this.events = {};
  320. }

  321. EventBus.prototype.on = function(event, callback) {
  322.     if (!this.events[event]) {
  323.         this.events[event] = [];
  324.     }
  325.     this.events[event].push(callback);
  326.     printl("注册事件监听器: " + event);
  327. };

  328. EventBus.prototype.off = function(event, callback) {
  329.     if (!this.events[event]) return;
  330.    
  331.     if (callback) {
  332.         var index = this.events[event].indexOf(callback);
  333.         if (index > -1) {
  334.             this.events[event].splice(index, 1);
  335.         }
  336.     } else {
  337.         delete this.events[event];
  338.     }
  339.     printl("移除事件监听器: " + event);
  340. };

  341. EventBus.prototype.emit = function(event, data) {
  342.     if (!this.events[event]) return;
  343.    
  344.     printl("触发事件: " + event + " 数据: " + JSON.stringify(data));
  345.    
  346.     var callbacks = this.events[event].slice(); // 复制数组避免修改问题
  347.     for (var i = 0; i < callbacks.length; i++) {
  348.         try {
  349.             callbacks[i](data);
  350.         } catch (e) {
  351.             printl("事件回调执行错误: " + e);
  352.         }
  353.     }
  354. };

  355. EventBus.prototype.once = function(event, callback) {
  356.     var self = this;
  357.     var wrapper = function(data) {
  358.         callback(data);
  359.         self.off(event, wrapper);
  360.     };
  361.     this.on(event, wrapper);
  362.     printl("注册一次性事件监听器: " + event);
  363. };

  364. var eventBus = new EventBus();
  365. printl("EventBus实例已创建");

  366. // 演示事件系统
  367. eventBus.on('user_login', function(data) {
  368.     printl("用户登录事件处理: " + data.username);
  369. });

  370. eventBus.on('data_loaded', function(data) {
  371.     printl("数据加载完成: " + data.count + " 条记录");
  372. });

  373. eventBus.once('app_init', function(data) {
  374.     printl("应用初始化完成: " + data.version);
  375. });

  376. // 触发事件
  377. eventBus.emit('user_login', { username: 'john_doe', timestamp: new Date() });
  378. eventBus.emit('data_loaded', { count: 100, source: 'database' });
  379. eventBus.emit('app_init', { version: '1.0.0' });

  380. sleep.second(2); // 2秒延时

  381. // ==================== 6. 任务队列 ====================
  382. printl("");
  383. printl("=== 6. 任务队列 ===");

  384. function TaskQueue(concurrency) {
  385.     concurrency = concurrency || 1;
  386.     this.queue = [];
  387.     this.running = 0;
  388.     this.concurrency = concurrency;
  389.     this.results = [];
  390. }

  391. TaskQueue.prototype.add = function(task) {
  392.     this.queue.push(task);
  393.     this.process();
  394. };

  395. TaskQueue.prototype.process = function() {
  396.     var self = this;
  397.    
  398.     while (this.running < this.concurrency && this.queue.length > 0) {
  399.         var task = this.queue.shift();
  400.         this.running++;
  401.         
  402.         // 异步执行任务
  403.         (function(currentTask, taskId) {
  404.             setTimeout(function() {
  405.                 try {
  406.                     var result = currentTask();
  407.                     self.results.push({ id: taskId, result: result, success: true });
  408.                     printl("任务完成: " + taskId);
  409.                 } catch (e) {
  410.                     self.results.push({ id: taskId, error: e.toString(), success: false });
  411.                     printl("任务失败: " + taskId + " " + e.toString());
  412.                 } finally {
  413.                     self.running--;
  414.                     self.process(); // 处理下一个任务
  415.                 }
  416.             }, 100); // 模拟异步延迟
  417.         })(task, this.results.length + 1);
  418.     }
  419. };

  420. TaskQueue.prototype.getResults = function() {
  421.     return this.results;
  422. };

  423. TaskQueue.prototype.clear = function() {
  424.     this.queue = [];
  425.     this.results = [];
  426.     this.running = 0;
  427. };

  428. var taskQueue = new TaskQueue(2); // 并发度为2
  429. printl("TaskQueue实例已创建,并发度: " + taskQueue.concurrency);

  430. // 添加任务
  431. taskQueue.add(function() {
  432.     printl("执行任务1: 数据清洗");
  433.     return { processed: 100, cleaned: 95 };
  434. });

  435. taskQueue.add(function() {
  436.     printl("执行任务2: 图片压缩");
  437.     return { originalSize: '2MB', compressedSize: '500KB' };
  438. });

  439. taskQueue.add(function() {
  440.     printl("执行任务3: 视频转码");
  441.     return { duration: '00:05:30', format: 'mp4' };
  442. });

  443. sleep.second(3); // 等待任务完成

  444. printl("任务执行结果: " + JSON.stringify(taskQueue.getResults()));

  445. sleep.second(2); // 2秒延时

  446. // ==================== 7. 配置管理器 ====================
  447. printl("");
  448. printl("=== 7. 配置管理器 ===");

  449. function ConfigManager() {
  450.     this.configs = {};
  451.     this.defaults = {};
  452. }

  453. ConfigManager.prototype.setDefault = function(key, value) {
  454.     this.defaults[key] = value;
  455.     if (!this.configs.hasOwnProperty(key)) {
  456.         this.configs[key] = value;
  457.     }
  458. };

  459. ConfigManager.prototype.set = function(key, value) {
  460.     this.configs[key] = value;
  461.     printl("设置配置: " + key + " = " + JSON.stringify(value));
  462. };

  463. ConfigManager.prototype.get = function(key) {
  464.     if (this.configs.hasOwnProperty(key)) {
  465.         return this.configs[key];
  466.     }
  467.     return this.defaults.hasOwnProperty(key) ? this.defaults[key] : null;
  468. };

  469. ConfigManager.prototype.getAll = function() {
  470.     var allConfigs = {};
  471.    
  472.     // 合并默认配置和自定义配置
  473.     for (var key in this.defaults) {
  474.         allConfigs[key] = this.defaults[key];
  475.     }
  476.     for (var key in this.configs) {
  477.         allConfigs[key] = this.configs[key];
  478.     }
  479.    
  480.     return allConfigs;
  481. };

  482. ConfigManager.prototype.reset = function(key) {
  483.     if (key) {
  484.         if (this.defaults.hasOwnProperty(key)) {
  485.             this.configs[key] = this.defaults[key];
  486.         } else {
  487.             delete this.configs[key];
  488.         }
  489.     } else {
  490.         this.configs = {};
  491.     }
  492.     printl("重置配置: " + (key || "全部"));
  493. };

  494. var configManager = new ConfigManager();
  495. printl("ConfigManager实例已创建");

  496. // 设置默认配置
  497. configManager.setDefault('theme', 'light');
  498. configManager.setDefault('language', 'en');
  499. configManager.setDefault('debug', false);

  500. // 设置自定义配置
  501. configManager.set('theme', 'dark');
  502. configManager.set('fontSize', 14);
  503. configManager.set('autoSave', true);

  504. printl("当前主题: " + configManager.get('theme'));
  505. printl("语言设置: " + configManager.get('language'));
  506. printl("字体大小: " + configManager.get('fontSize'));
  507. printl("自动保存: " + configManager.get('autoSave'));
  508. printl("调试模式: " + configManager.get('debug'));

  509. printl("所有配置: " + JSON.stringify(configManager.getAll()));

  510. sleep.second(2); // 2秒延时

  511. configManager.reset('theme');
  512. printl("重置主题后: " + configManager.get('theme'));

  513. configManager.reset();
  514. printl("重置所有配置后: " + JSON.stringify(configManager.getAll()));

  515. sleep.second(2); // 2秒延时

  516. // ==================== 8. 日志管理器 ====================
  517. printl("");
  518. printl("=== 8. 日志管理器 ===");

  519. function LogManager() {
  520.     this.logs = [];
  521.     this.maxLogs = 1000;
  522.     this.levels = {
  523.         DEBUG: 0,
  524.         INFO: 1,
  525.         WARN: 2,
  526.         ERROR: 3
  527.     };
  528.     this.currentLevel = this.levels.INFO;
  529. }

  530. LogManager.prototype.log = function(level, message, data) {
  531.     if (level < this.currentLevel) return;
  532.    
  533.     var logEntry = {
  534.         timestamp: new Date(),
  535.         level: this.getLevelName(level),
  536.         message: message,
  537.         data: data || null
  538.     };
  539.    
  540.     this.logs.push(logEntry);
  541.    
  542.     // 限制日志数量
  543.     if (this.logs.length > this.maxLogs) {
  544.         this.logs.shift();
  545.     }
  546.    
  547.     // 输出到控制台
  548.     var prefix = '[' + logEntry.timestamp.toISOString() + '] [' + logEntry.level + '] ';
  549.     printl(prefix + message);
  550.     if (data) {
  551.         printl('  数据: ' + JSON.stringify(data));
  552.     }
  553. };

  554. LogManager.prototype.debug = function(message, data) {
  555.     this.log(this.levels.DEBUG, message, data);
  556. };

  557. LogManager.prototype.info = function(message, data) {
  558.     this.log(this.levels.INFO, message, data);
  559. };

  560. LogManager.prototype.warn = function(message, data) {
  561.     this.log(this.levels.WARN, message, data);
  562. };

  563. LogManager.prototype.error = function(message, data) {
  564.     this.log(this.levels.ERROR, message, data);
  565. };

  566. LogManager.prototype.getLevelName = function(level) {
  567.     for (var name in this.levels) {
  568.         if (this.levels[name] === level) {
  569.             return name;
  570.         }
  571.     }
  572.     return 'UNKNOWN';
  573. };

  574. LogManager.prototype.getLogs = function(level, limit) {
  575.     limit = limit || 50;
  576.     var filteredLogs = this.logs;
  577.    
  578.     if (level !== undefined) {
  579.         filteredLogs = this.logs.filter(function(log) {
  580.             return log.level === this.getLevelName(level);
  581.         }.bind(this));
  582.     }
  583.    
  584.     return filteredLogs.slice(-limit);
  585. };

  586. LogManager.prototype.clear = function() {
  587.     this.logs = [];
  588.     printl("日志已清空");
  589. };

  590. var logManager = new LogManager();
  591. printl("LogManager实例已创建");

  592. // 演示日志记录
  593. logManager.debug("调试信息", { detail: "这是调试级别的日志" });
  594. logManager.info("应用启动", { version: "1.0.0", environment: "production" });
  595. logManager.warn("内存使用较高", { used: "80%", total: "1GB" });
  596. logManager.error("数据库连接失败", { host: "localhost", port: 3306 });

  597. sleep.second(2); // 2秒延时

  598. printl("最近5条日志:");
  599. var recentLogs = logManager.getLogs(undefined, 5);
  600. for (var i = 0; i < recentLogs.length; i++) {
  601.     printl("  " + recentLogs[i].level + " - " + recentLogs[i].message);
  602. }

  603. logManager.clear();

  604. sleep.second(2); // 2秒延时

  605. // ==================== 9. 字符串工具类 ====================
  606. printl("");
  607. printl("=== 9. 字符串工具类 ===");

  608. function StringUtils() {}

  609. StringUtils.capitalize = function(str) {
  610.     if (!str) return str;
  611.     return str.charAt(0).toUpperCase() + str.slice(1);
  612. };

  613. StringUtils.camelCase = function(str) {
  614.     return str.replace(/[-_\s]+(.)?/g, function(match, chr) {
  615.         return chr ? chr.toUpperCase() : '';
  616.     });
  617. };

  618. StringUtils.kebabCase = function(str) {
  619.     return str.replace(/([a-z])([A-Z])/g, '$1-$2')
  620.               .replace(/[\s_]+/g, '-')
  621.               .toLowerCase();
  622. };

  623. StringUtils.truncate = function(str, length, suffix) {
  624.     suffix = suffix || '...';
  625.     if (str.length <= length) return str;
  626.     return str.substring(0, length - suffix.length) + suffix;
  627. };

  628. StringUtils.repeat = function(str, times) {
  629.     var result = '';
  630.     for (var i = 0; i < times; i++) {
  631.         result += str;
  632.     }
  633.     return result;
  634. };

  635. StringUtils.padLeft = function(str, length, char) {
  636.     char = char || ' ';
  637.     while (str.length < length) {
  638.         str = char + str;
  639.     }
  640.     return str;
  641. };

  642. StringUtils.padRight = function(str, length, char) {
  643.     char = char || ' ';
  644.     while (str.length < length) {
  645.         str += char;
  646.     }
  647.     return str;
  648. };

  649. StringUtils.stripHtml = function(html) {
  650.     return html.replace(/<[^>]*>/g, '');
  651. };

  652. StringUtils.escapeHtml = function(text) {
  653.     return text.replace(/[&<>"']/g, function(match) {
  654.         switch (match) {
  655.             case '&': return '&';
  656.             case '<': return '<';
  657.             case '>': return '>';
  658.             case '"': return '"';
  659.             case "'": return ''';
  660.         }
  661.     });
  662. };

  663. printl("StringUtils工具类已定义");

  664. // 演示字符串操作
  665. printl("首字母大写: " + StringUtils.capitalize('hello world'));
  666. printl("驼峰命名: " + StringUtils.camelCase('hello-world-test'));
  667. printl("短横线命名: " + StringUtils.kebabCase('helloWorldTest'));
  668. printl("截断字符串: " + StringUtils.truncate('这是一个很长的字符串', 10));
  669. printl("重复字符串: " + StringUtils.repeat('*', 5));
  670. printl("左填充: " + StringUtils.padLeft('42', 5, '0'));
  671. printl("右填充: " + StringUtils.padRight('42', 5, '0'));
  672. printl("去除HTML: " + StringUtils.stripHtml('<p>这是一段<b>HTML</b>文本</p>'));
  673. printl("转义HTML: " + StringUtils.escapeHtml('<script>alert("XSS")</script>'));

  674. sleep.second(2); // 2秒延时

  675. // ==================== 10. 数组工具类 ====================
  676. printl("");
  677. printl("=== 10. 数组工具类 ===");

  678. function ArrayUtils() {}

  679. ArrayUtils.unique = function(arr) {
  680.     var seen = {};
  681.     var result = [];
  682.    
  683.     for (var i = 0; i < arr.length; i++) {
  684.         var item = arr[i];
  685.         var key = typeof item + ':' + item;
  686.         if (!seen.hasOwnProperty(key)) {
  687.             seen[key] = true;
  688.             result.push(item);
  689.         }
  690.     }
  691.    
  692.     return result;
  693. };

  694. ArrayUtils.flatten = function(arr) {
  695.     var result = [];
  696.    
  697.     for (var i = 0; i < arr.length; i++) {
  698.         if (Array.isArray(arr[i])) {
  699.             result = result.concat(ArrayUtils.flatten(arr[i]));
  700.         } else {
  701.             result.push(arr[i]);
  702.         }
  703.     }
  704.    
  705.     return result;
  706. };

  707. ArrayUtils.chunk = function(arr, size) {
  708.     var result = [];
  709.    
  710.     for (var i = 0; i < arr.length; i += size) {
  711.         result.push(arr.slice(i, i + size));
  712.     }
  713.    
  714.     return result;
  715. };

  716. ArrayUtils.shuffle = function(arr) {
  717.     var shuffled = arr.slice();
  718.    
  719.     for (var i = shuffled.length - 1; i > 0; i--) {
  720.         var j = Math.floor(Math.random() * (i + 1));
  721.         var temp = shuffled[i];
  722.         shuffled[i] = shuffled[j];
  723.         shuffled[j] = temp;
  724.     }
  725.    
  726.     return shuffled;
  727. };

  728. ArrayUtils.groupBy = function(arr, key) {
  729.     var result = {};
  730.    
  731.     for (var i = 0; i < arr.length; i++) {
  732.         var item = arr[i];
  733.         var groupKey = item[key];
  734.         
  735.         if (!result.hasOwnProperty(groupKey)) {
  736.             result[groupKey] = [];
  737.         }
  738.         
  739.         result[groupKey].push(item);
  740.     }
  741.    
  742.     return result;
  743. };

  744. ArrayUtils.sum = function(arr, property) {
  745.     var total = 0;
  746.    
  747.     for (var i = 0; i < arr.length; i++) {
  748.         if (property) {
  749.             total += arr[i][property] || 0;
  750.         } else {
  751.             total += arr[i];
  752.         }
  753.     }
  754.    
  755.     return total;
  756. };

  757. ArrayUtils.average = function(arr, property) {
  758.     if (arr.length === 0) return 0;
  759.    
  760.     var sum = ArrayUtils.sum(arr, property);
  761.     return sum / arr.length;
  762. };

  763. printl("ArrayUtils工具类已定义");

  764. // 演示数组操作
  765. var numbers = [1, 2, 3, 2, 4, 1, 5, 3];
  766. printl("去重: " + JSON.stringify(ArrayUtils.unique(numbers)));

  767. var nested = [1, [2, 3], [4, [5, 6]], 7];
  768. printl("扁平化: " + JSON.stringify(ArrayUtils.flatten(nested)));

  769. var largeArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
  770. printl("分块: " + JSON.stringify(ArrayUtils.chunk(largeArray, 3)));

  771. var cards = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
  772. printl("洗牌前: " + JSON.stringify(cards));
  773. var shuffledCards = ArrayUtils.shuffle(cards);
  774. printl("洗牌后: " + JSON.stringify(shuffledCards));

  775. var users = [
  776.     { name: '张三', age: 25, department: '技术部' },
  777.     { name: '李四', age: 30, department: '市场部' },
  778.     { name: '王五', age: 28, department: '技术部' },
  779.     { name: '赵六', age: 35, department: '财务部' }
  780. ];

  781. printl("按部门分组: " + JSON.stringify(ArrayUtils.groupBy(users, 'department')));
  782. printl("年龄总和: " + ArrayUtils.sum(users, 'age'));
  783. printl("平均年龄: " + ArrayUtils.average(users, 'age'));

  784. sleep.second(2); // 2秒延时

  785. // ==================== 总结 ====================
  786. printl("");
  787. printl("=== 实用工具集演示完成 ===");
  788. printl("&#128161; 这些工具在实际项目开发中非常实用!");
  789. printl("包含:文件管理、网络请求、数据验证、缓存、事件系统、任务队列、配置管理、日志、字符串和数组工具");
复制代码



untoAIWROK软件运算符高级应用实例nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖