如何编写递归函数移除对象数组中冗余的properties嵌套层级
实现核心思路
- 统一递归处理逻辑,对任意层级的节点(数组、普通对象、基础值)做逐一遍历
- 遇到带
properties键的对象,先把properties下的所有属性递归处理后直接合并提升到当前节点层,移除冗余的properties占位 - 遍历节点下的所有非
properties属性,只要值是数组或普通对象就递归调用处理逻辑,覆盖深层嵌套的所有节点 - 全程返回全新的处理后结构,不直接修改原始数据,避免数据污染
可参考的实现代码
// 递归拆解所有层级的properties嵌套 function flattenProperties(node) { // 数组类型:逐元素递归处理 if (Array.isArray(node)) { return node.map(item => flattenProperties(item)) } // 普通对象类型:拆解嵌套的properties if (typeof node === 'object' && node !== null) { const processedNode = {} // 第一步:把properties下的属性逐个递归处理后,直接提升到当前层 if (Object.hasOwn(node, 'properties')) { const childProps = node.properties Object.keys(childProps).forEach(propKey => { // 对properties内的每个值做递归处理,覆盖深层嵌套 processedNode[propKey] = flattenProperties(childProps[propKey]) }) } // 第二步:遍历当前节点除properties外的自有属性,逐个递归处理 Object.keys(node).forEach(key => { if (key === 'properties') return // 已完成properties的属性提升,跳过原占位键 processedNode[key] = flattenProperties(node[key]) }) return processedNode } // 基础类型(字符串、数字、布尔值等)直接返回 return node } // 调用处理函数 const processedResult = flattenProperties(test)
效果说明
- 处理后输出的结构和预期目标完全匹配,无论
properties嵌套在顶层、数组元素、深层对象层级,都会被自动拆解 - 递归逻辑会深入处理
properties内部的子结构,不会漏掉数组、嵌套对象里的冗余properties键 - 原有属性值、数组顺序完全保留,不会出现数据丢失或结构错位
- 节点自身的直接属性优先级高于
properties内的同名属性,符合常规数据处理逻辑 - 对非目标结构兼容性好,遇到不带
properties键的普通对象、数组时不会报错中断
内容的提问来源于stack exchange,提问作者Voque
相关产品推荐
相关产品推荐

