You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扁平化对象且保留$gt、$lt字段?flat库参数失效问题

自定义对象扁平化:保留含$gt/$lt的子对象不拆分

你遇到的问题是flat库的maxDepth参数没法灵活适配需求——既要扁平化任意深度的嵌套结构,又要对包含$gt/$lt的子对象停止扁平化。直接自己写个递归函数就能完美解决这个问题,不用依赖第三方库也能精准控制规则。

原始对象

{
 values:{
  gross_floor_area:{"$gt":200, "$lt":5000},
  nested: {net_floor_area:{"$gt":200, "$lt":5000}}
}
}

期望结果

{ 
  'values.gross_floor_area':  { '$gt': 200, '$lt': 5000 },
  'values.nested.net_floor_area': {"$gt":200, "$lt":5000} 
}

解决方案代码

function flattenObject(obj, parentKey = '', result = {}) {
  for (const [key, value] of Object.entries(obj)) {
    const currentKey = parentKey ? `${parentKey}.${key}` : key;
    
    // 只要当前对象包含$gt或$lt,就停止递归,直接保留原对象
    if (typeof value === 'object' && value !== null && !('$gt' in value) && !('$lt' in value)) {
      flattenObject(value, currentKey, result);
    } else {
      result[currentKey] = value;
    }
  }
  return result;
}

// 测试用例
const originalObj = {
 values:{
  gross_floor_area:{"$gt":200, "$lt":5000},
  nested: {net_floor_area:{"$gt":200, "$lt":5000}}
}
};

const flattenedResult = flattenObject(originalObj);
console.log(flattenedResult);

逻辑说明

  • 递归遍历对象的每一层键值对,自动拼接层级式的键名(比如values.nested.net_floor_area)
  • 遇到包含$gt或$lt的子对象时,直接将整个对象存入结果,不再继续递归拆分
  • 普通的嵌套对象会一直被扁平化,直到遇到需要保留的目标对象或非对象类型的值

这个方法完全适配你的需求,不管嵌套层级有多深,只要子对象里没有$gt/$lt就会被扁平化,反之则完整保留。

内容的提问来源于stack exchange,提问作者Rickhomes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:55:29