Angular-TypeScript中如何将二维字符串数组转为二维对象数组?
Angular-TypeScript 二维字符串数组转二维对象数组的正确实现
最简实现方案
直接利用数组的map方法嵌套转换,这是最简洁且符合TypeScript特性的写法:
const data = [["test1", "test2", "test3"], ["test4", "test5", "test6"]]; const dataObj = data.map(row => row.map(item => ({ content: item })));
外层map遍历原数组的每一行,内层map将每行中的每个字符串转换为{ content: 字符串 }结构的对象,最终直接生成目标二维对象数组。
带类型定义的规范实现
为了符合TypeScript的类型安全要求,可以提前定义对象类型:
// 定义单个对象的类型 interface ContentItem { content: string; } // 明确原数组和目标数组的类型 const data: string[][] = [["test1", "test2", "test3"], ["test4", "test5", "test6"]]; const dataObj: ContentItem[][] = data.map(row => row.map(item => ({ content: item })));
你之前两种方法的问题分析
初始化嵌套数组后循环赋值的问题
你初始化let dataObj = <any>[[{ }]]时,数组已经包含了一个空对象的子数组。后续循环赋值时,若原数组的行数/列数与初始结构不匹配(比如原数组有2行,但初始只有1行),访问未初始化的索引会触发数组越界错误,且<any>会丢失类型检查,增加潜在bug风险。错误使用
push方法的问题Array.push()的参数是要添加到数组末尾的元素,你传入i,j,{content: data[i][j]}会把这三个值作为独立元素依次推入数组,完全不符合二维数组的结构要求。正确的做法应该是先把每行转换为对象数组,再将整个行数组推入目标数组。
内容的提问来源于stack exchange,提问作者Nicola
相关产品推荐
相关产品推荐

