You need to enable JavaScript to run this app. 如何编写递归函数移除对象数组中冗余的properties嵌套层级
优惠活动
大模型
产品
解决方案
定价
更多

如何编写递归函数移除对象数组中冗余的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 05:36:04