如何在TypeScript中轻松格式化指定嵌套对象数组?
TypeScript 实现嵌套对象数组的结构转换
需求说明
需要将包含嵌套子分类的对象数组转换为指定结构:将原对象的segment字段重命名为link,移除id字段,并递归处理subCategory中的嵌套对象。
原数组结构
let arr = [{ id: 1, name: 'Test', segment: 'test', subCategory: [{ id: 1, name:'Test1', segment:'test1' }] }]
目标数组结构
let newArr = [{ link: 'test', name: 'Test', subCategory: [{ link: 'test1', name: 'Test1' }] }]
实现方案
带类型校验的严谨实现
利用TypeScript类型定义保证类型安全,通过递归函数处理嵌套结构:
// 定义原数据类型 interface OriginalCategory { id: number; name: string; segment: string; subCategory?: OriginalCategory[]; } // 定义转换后的数据类型 interface TransformedCategory { link: string; name: string; subCategory?: TransformedCategory[]; } // 单个对象转换函数,递归处理子分类 const transformCategory = (item: OriginalCategory): TransformedCategory => { const { segment: link, name, subCategory } = item; return { link, name, ...(subCategory && { subCategory: subCategory.map(transformCategory) }) }; }; // 转换整个数组 const newArr = arr.map(transformCategory);
极简版实现(无类型定义)
如果不需要严格的类型校验,可简化为以下代码:
const transformItem = (item: any) => ({ link: item.segment, name: item.name, ...(item.subCategory && { subCategory: item.subCategory.map(transformItem) }) }); const newArr = arr.map(transformItem);
说明
- 递归函数会自动处理任意层级的
subCategory嵌套,无需额外修改代码。 - 利用对象解构和扩展运算符简化字段映射逻辑,代码简洁易读。
内容的提问来源于stack exchange,提问作者knbibin
相关产品推荐
相关产品推荐

