 | |  |  | AIWROK软件类型转换方法例子
- // 交流QQ群711841924群一,苹果内测群,528816639
- // 本文档是AIWROK IDE的主脚本文件,包含类型转换工具和数据处理模块
- // 提供了完整的类型检测、类型转换、日期格式化、JSON解析等功能
- // 适用于Android和iOS跨平台移动开发环境,基于ES5标准编写
- print.log("开始执行日志窗口操作");
- print.log("1. 显示日志窗口");
- printl( logWindow.show())
- print.log("日志窗口显示完成");
- print.log("2. 清空日志窗口");
- printl(logWindow.clear())
- print.log("日志窗口清空完成");
- print.log("3. 设置日志窗口高度为2500");
- printl(logWindow.setHeight(2500))
- print.log("日志窗口高度设置完成");
- print.log("4. 设置日志窗口宽度为1000");
- printl(logWindow.setWidth(1000))
- print.log("日志窗口宽度设置完成");
- print.log("5. 设置日志窗口为不可点击模式");
- printl(logWindow.setNoClickModel())
- print.log("日志窗口不可点击模式设置完成");
- print.log("所有日志窗口操作执行完毕");
- var TypeConverter = (function() {
- var self = {};
-
- /**
- * 获取值的类型
- * @param {*} value - 要检查的值
- * @returns {string} 值的类型字符串
- */
- self.getType = function(value) {
- return typeof value;
- };
-
- /**
- * 判断是否为字符串类型
- * @param {*} value - 要检查的值
- * @returns {boolean} 是否为字符串
- */
- self.isString = function(value) {
- return typeof value === 'string';
- };
-
- /**
- * 判断是否为有效数字类型(排除NaN)
- * @param {*} value - 要检查的值
- * @returns {boolean} 是否为有效数字
- */
- self.isNumber = function(value) {
- return typeof value === 'number' && !isNaN(value);
- };
-
- /**
- * 判断是否为布尔类型
- * @param {*} value - 要检查的值
- * @returns {boolean} 是否为布尔值
- */
- self.isBoolean = function(value) {
- return typeof value === 'boolean';
- };
-
- /**
- * 判断是否为非空对象
- * @param {*} value - 要检查的值
- * @returns {boolean} 是否为非空对象
- */
- self.isObject = function(value) {
- return typeof value === 'object' && value !== null;
- };
-
- /**
- * 判断是否为数组
- * @param {*} value - 要检查的值
- * @returns {boolean} 是否为数组
- */
- self.isArray = function(value) {
- return Object.prototype.toString.call(value) === '[object Array]';
- };
-
- /**
- * 将值转换为数字,支持默认值
- * @param {*} value - 要转换的值
- * @param {number} [defaultValue=0] - 转换失败时的默认值
- * @returns {number} 转换后的数字或默认值
- */
- self.toNumber = function(value, defaultValue) {
- if (defaultValue === undefined) {
- defaultValue = 0;
- }
- var result = Number(value);
- if (isNaN(result)) {
- return defaultValue;
- }
- return result;
- };
-
- /**
- * 将值转换为字符串,支持默认值
- * @param {*} value - 要转换的值
- * @param {string} [defaultValue=''] - 值为null/undefined时的默认值
- * @returns {string} 转换后的字符串或默认值
- */
- self.toString = function(value, defaultValue) {
- if (value === null || value === undefined) {
- return defaultValue !== undefined ? defaultValue : '';
- }
- return String(value);
- };
-
- /**
- * 将值转换为布尔值
- * @param {*} value - 要转换的值
- * @returns {boolean} 转换后的布尔值
- */
- self.toBoolean = function(value) {
- if (self.isBoolean(value)) {
- return value;
- }
- if (self.isNumber(value)) {
- return value !== 0;
- }
- if (self.isString(value)) {
- return value.toLowerCase() === 'true' || (value.toLowerCase() !== 'false' && value !== '0' && value !== '');
- }
- return Boolean(value);
- };
-
- /**
- * 格式化日期为指定格式
- * @param {Date|string} date - 日期对象或日期字符串
- * @param {string} [format='YYYY-MM-DD HH:mm:ss'] - 日期格式
- * @returns {string} 格式化后的日期字符串,无效日期返回空字符串
- */
- self.formatDate = function(date, format) {
- if (!date) return '';
- var d = date instanceof Date ? date : new Date(date);
- if (isNaN(d.getTime())) return '';
-
- format = format || 'YYYY-MM-DD HH:mm:ss';
-
- var year = d.getFullYear();
- var month = String(d.getMonth() + 1).padStart(2, '0');
- var day = String(d.getDate()).padStart(2, '0');
- var hours = String(d.getHours()).padStart(2, '0');
- var minutes = String(d.getMinutes()).padStart(2, '0');
- var seconds = String(d.getSeconds()).padStart(2, '0');
-
- return format
- .replace('YYYY', year)
- .replace('MM', month)
- .replace('DD', day)
- .replace('HH', hours)
- .replace('mm', minutes)
- .replace('ss', seconds);
- };
-
- /**
- * 安全解析JSON字符串,支持默认值
- * @param {string} jsonStr - JSON字符串
- * @param {*} [defaultValue=null] - 解析失败时的默认值
- * @returns {*} 解析后的对象或默认值
- */
- self.safeParseJSON = function(jsonStr, defaultValue) {
- try {
- return JSON.parse(jsonStr);
- } catch (e) {
- return defaultValue !== undefined ? defaultValue : null;
- }
- };
-
- return self;
- })();
- var DataProcessor = (function() {
- var self = {};
-
- /**
- * 处理单条用户数据,进行类型转换和验证
- * @param {Object} rawData - 原始用户数据
- * @returns {Object} 处理后的用户对象
- */
- self.processUserData = function(rawData) {
- var result = {
- id: TypeConverter.toNumber(rawData.id, 0),
- name: TypeConverter.toString(rawData.name, 'Unknown'),
- age: TypeConverter.toNumber(rawData.age, 0),
- isActive: TypeConverter.toBoolean(rawData.isActive),
- score: TypeConverter.toNumber(rawData.score, 0),
- tags: TypeConverter.isArray(rawData.tags) ? rawData.tags : [],
- createdAt: TypeConverter.formatDate(rawData.createdAt),
- metadata: TypeConverter.isObject(rawData.metadata) ? rawData.metadata : {}
- };
-
- result.isValid = result.id > 0 && result.name !== 'Unknown';
- result.displayScore = result.score.toFixed(2);
- result.ageGroup = self._calculateAgeGroup(result.age);
-
- return result;
- };
-
- /**
- * 根据年龄计算年龄段
- * @param {number} age - 年龄
- * @returns {string} 年龄段描述
- */
- self._calculateAgeGroup = function(age) {
- if (age < 18) return '未成年';
- if (age < 30) return '青年';
- if (age < 50) return '中年';
- return '老年';
- };
-
- /**
- * 批量处理用户数据数组
- * @param {Array} dataArray - 用户数据数组
- * @returns {Object} 处理结果,包含成功、失败和统计信息
- */
- self.batchProcess = function(dataArray) {
- var results = [];
- var errors = [];
-
- for (var i = 0; i < dataArray.length; i++) {
- try {
- var processed = self.processUserData(dataArray[i]);
- results.push(processed);
- } catch (e) {
- errors.push({
- index: i,
- data: dataArray[i],
- error: e.message
- });
- }
- }
-
- return {
- success: results,
- failed: errors,
- summary: {
- total: dataArray.length,
- successCount: results.length,
- failedCount: errors.length,
- successRate: (results.length / dataArray.length * 100).toFixed(2) + '%'
- }
- };
- };
-
- /**
- * 生成数据处理报告
- * @param {Object} processResult - 批量处理结果对象
- * @returns {string} 格式化的报告字符串
- */
- self.generateReport = function(processResult) {
- var report = [];
- report.push('========== 数据处理报告 ==========');
- report.push('总记录数: ' + processResult.summary.total);
- report.push('成功处理: ' + processResult.summary.successCount);
- report.push('处理失败: ' + processResult.summary.failedCount);
- report.push('成功率: ' + processResult.summary.successRate);
- report.push('');
-
- if (processResult.success.length > 0) {
- report.push('--- 成功处理的记录 ---');
- for (var i = 0; i < Math.min(3, processResult.success.length); i++) {
- var item = processResult.success[i];
- report.push('ID: ' + item.id + ' | 姓名: ' + item.name +
- ' | 年龄: ' + item.age + ' (' + item.ageGroup + ')' +
- ' | 活跃: ' + (item.isActive ? '是' : '否') +
- ' | 分数: ' + item.displayScore);
- }
- if (processResult.success.length > 3) {
- report.push('... 还有 ' + (processResult.success.length - 3) + ' 条记录');
- }
- report.push('');
- }
-
- if (processResult.failed.length > 0) {
- report.push('--- 处理失败的记录 ---');
- for (var j = 0; j < processResult.failed.length; j++) {
- var fail = processResult.failed[j];
- report.push('索引: ' + fail.index + ' | 错误: ' + fail.error);
- }
- }
-
- report.push('================================');
- return report.join('\n');
- };
-
- return self;
- })();
- var testData = [
- {
- id: "1001",
- name: "张三",
- age: "25",
- isActive: "true",
- score: "95.5",
- tags: ["JavaScript", "Android"],
- createdAt: new Date("2024-01-15T10:30:00"),
- metadata: { department: "研发部", level: "高级" }
- },
- {
- id: "1002",
- name: "李四",
- age: "35",
- isActive: "false",
- score: "88.3",
- tags: ["iOS", "React Native"],
- createdAt: "2024-02-20T14:45:00",
- metadata: { department: "产品部", level: "中级" }
- },
- {
- id: "1003",
- name: "王五",
- age: "16",
- isActive: "1",
- score: "92.7",
- tags: ["Python", "AI"],
- createdAt: new Date("2024-03-10T09:15:00"),
- metadata: { department: "AI实验室", level: "初级" }
- },
- {
- id: "",
- name: "",
- age: "invalid",
- isActive: "yes",
- score: "abc",
- tags: null,
- createdAt: "invalid-date",
- metadata: null
- },
- {
- id: "1005",
- name: "赵六",
- age: "55",
- isActive: "0",
- score: "76.2",
- tags: ["Java", "Spring"],
- createdAt: new Date("2024-04-05T16:20:00"),
- metadata: { department: "架构部", level: "专家" }
- }
- ];
- printl('========== 类型转换工具测试 ==========');
- printl('类型检测:');
- printl(' typeof "Hello" = ' + TypeConverter.getType("Hello"));
- printl(' typeof 123 = ' + TypeConverter.getType(123));
- printl(' typeof true = ' + TypeConverter.getType(true));
- printl(' typeof [1,2,3] = ' + TypeConverter.getType([1,2,3]));
- printl(' typeof {a:1} = ' + TypeConverter.getType({a:1}));
- printl('');
- printl('类型转换:');
- print.log(' Number("3.14") = ' + TypeConverter.toNumber("3.14"));
- printl(' Number("3.14") = ' + TypeConverter.toNumber("3.14"));
- print.log(' Number("abc") = ' + TypeConverter.toNumber("abc", 0));
- printl(' Number("abc") = ' + TypeConverter.toNumber("abc", 0));
- print.log(' String(123) = ' + TypeConverter.toString(123));
- printl(' String(123) = ' + TypeConverter.toString(123));
- print.log(' String(true) = ' + TypeConverter.toString(true));
- printl(' String(true) = ' + TypeConverter.toString(true));
- print.log(' Boolean("true") = ' + TypeConverter.toBoolean("true"));
- printl(' Boolean("true") = ' + TypeConverter.toBoolean("true"));
- print.log(' Boolean("0") = ' + TypeConverter.toBoolean("0"));
- printl(' Boolean("0") = ' + TypeConverter.toBoolean("0"));
- print.log(' Boolean(1) = ' + TypeConverter.toBoolean(1));
- printl(' Boolean(1) = ' + TypeConverter.toBoolean(1));
- printl('');
- printl('日期格式化:');
- var now = new Date();
- printl(' 当前时间: ' + TypeConverter.formatDate(now));
- printl(' 自定义格式: ' + TypeConverter.formatDate(now, 'YYYY年MM月DD日 HH:mm'));
- printl('');
- printl('========== 数据处理示例 ==========');
- var processResult = DataProcessor.batchProcess(testData);
- printl(DataProcessor.generateReport(processResult));
- printl('');
- printl('========== 单条数据处理详情 ==========');
- var singleUser = DataProcessor.processUserData(testData[0]);
- printl('处理后的用户对象:');
- printl(JSON.stringify(singleUser, null, 2));
- printl('');
- printl('========== 日志窗口操作测试 ==========');
- printl(logWindow.show())
- printl(logWindow.clear())
- printl(logWindow.setHeight(2500))
- printl(logWindow.setWidth(1000))
- printl(logWindow.setNoClickModel())
复制代码
| |  | |  |
|