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

如何使用Lodash移除嵌套对象数组中的空fieldGroup数组

需求说明
  • 待处理数据为对象数组结构
  • 需要移除所有嵌套层级中,值为空数组的fieldGroup字段,存在有效内容的fieldGroup数组需完整保留
  • 可使用Lodash、omit-deep-lodash或其他第三方工具库实现

如何使用Lodash移除嵌套层级的空数组?

示例原始数据

[
{
    "id": "sch_CV8e5NzZXwXhNp3TGnpryEmub2EC",
    "display_name": "test name",
    "connection_profile": {
        "type": "NAVIGATION",
        "access_methods": [
            {
                "submit": true,
                "ui_web": [
                    {
                        "id": "dslogo",
                        "fieldGroup": [] // 待移除的空fieldGroup
                    },
                    {
                        "key": "label",
                        "fieldGroup": [] // 待移除的空fieldGroup
                    },
                    {
                        "key": "forgotpassword",
                        "fieldGroup": [ // 需保留的非空fieldGroup
                            {
                                "id": "forgotpassword",
                                "key": "forgotpassword",
                                "type": "link",
                                "className": "d-flex flex-grow-1 justify-content-end",
                                "templateOptions": {
                                    "label": "Need help?",
                                    "className": "pull-right",
                                    "hideRequiredMarker": true
                                },
                                "_id": "62b4665e9bba345e1937f669"
                            }
                        ]
                    }
                ],
                "navigator_method": "login",
                "_id": "62b4665e9bba345e1937f663"
            }
        ]
    }
},
{
    "id": "sch_CV8e5NzZXwXhNp3TGnpryEmub2ED",
    "display_name": "test name 2",
    "connection_profile": {
        "type": "NAVIGATION",
        "access_methods": [
            {
                "submit": true,
                "ui_web": [
                    {
                        "key": "forgotpassword",
                        "fieldGroup": [
                            {
                                "id": "forgotpassword 11",
                                "key": "forgotpassword 11",
                                "type": "link 11"
                            },
                            {
                                "id": "forgotpassword 22",
                                "key": "forgotpassword 22",
                                "type": "link",
                                "className": "d-flex flex-grow-1 justify-content-end"
                            }
                        ]
                    },
                    {
                        "id": "dslogo",
                        "fieldGroup": []
                    },
                    {
                        "key": "label",
                        "fieldGroup": []
                    }
                ],
                "navigator_method": "login",
                "_id": "62b4665e9bba345e1937f663"
            }
        ]
    }
}
]
实现方案

方案1:纯Lodash递归实现(无额外依赖)

不需要引入额外的深度删除工具,通过递归遍历所有嵌套层级,精准匹配需要删除的字段,逻辑完全可控,不会误删其他字段。

const _ = require('lodash');

function removeEmptyFieldGroup(data) {
  // 处理数组:递归遍历每一项
  if (_.isArray(data)) {
    return data.map(item => removeEmptyFieldGroup(item));
  }
  // 处理纯对象
  if (_.isPlainObject(data)) {
    // 先递归处理当前对象下的所有属性值
    const processedObj = _.mapValues(data, val => removeEmptyFieldGroup(val));
    // 判定当前对象的fieldGroup是否为空数组,是则删除该字段
    if (_.isArray(processedObj.fieldGroup) && processedObj.fieldGroup.length === 0) {
      return _.omit(processedObj, 'fieldGroup');
    }
    return processedObj;
  }
  // 基础类型值(字符串、数字、布尔值等)直接返回
  return data;
}

// 调用方法
const result = removeEmptyFieldGroup(原始待处理数据);

方案2:使用omit-deep-lodash实现(代码更简洁)

如果项目中已经引入了omit-deep-lodash工具库,可以直接传入自定义匹配规则,一行代码完成深度删除:

const _ = require('lodash');
const omitDeep = require('omit-deep-lodash');

const result = omitDeep(原始待处理数据, (value, key) => {
  // 匹配规则:键名为fieldGroup,且值为长度为0的空数组
  return key === 'fieldGroup' && _.isArray(value) && value.length === 0;
});

方案说明

  • 两种方案都会返回全新的处理后数据,不会修改原始输入对象,避免产生副作用
  • 处理后所有值为空数组的fieldGroup字段会被完全移除,带有效内容的fieldGroup数组会完整保留,包括数组内部的嵌套结构
  • 如果后续需要删除其他符合规则的字段,只需要调整判断函数里的匹配条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:09:28