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

JavaScript递归删除含__deleteConditions:true的对象及子对象

递归过滤带有__deleteConditions: true的对象数组

你可以通过递归遍历数组的每一层,筛选掉__deleteConditions为true的对象,同时对每个保留对象的items子数组做同样的递归处理,实现需求。

实现代码

function filterDeleteConditions(items) {
  // 过滤当前层级的对象,排除__deleteConditions为true的项
  return items.filter(item => {
    // 直接剔除标记为删除的对象
    if (item.__deleteConditions === true) {
      return false;
    }
    // 如果当前对象包含子items数组,递归处理子层级
    if (item.items && Array.isArray(item.items)) {
      item.items = filterDeleteConditions(item.items);
    }
    // 保留符合条件的对象
    return true;
  });
}

// 测试用的原数组
const originalArray = [
  {
    "fieldID": 10,
    "isGroup": true,
    "itemDisplayName": "Cliente",
    "items": [
      {
        "fieldID": 1,
        "isGroup": false,
        "itemDisplayName": "Código cliente",
        "items": [],
        "__deleteConditions": false
      },
      {
        "fieldID": 2,
        "isGroup": false,
        "itemDisplayName": "Apellidos",
        "items": [],
        "__deleteConditions": true
      }
    ]
  }, 
  {
    "fieldID": 20,
    "isGroup": true,
    "itemDisplayName": "Aseguradora",
    "items": [
      {
        "fieldID": 3,
        "isGroup": false,
        "itemDisplayName": "Código",
        "items": [
          {
            "fieldID": 4,
            "isGroup": false,
            "itemDisplayName": "Id",
            "items": [
              {
                "fieldID": 5,
                "isGroup": false,
                "itemDisplayName": "Numerical",
                "items": [],
                "__deleteConditions": true
              },
              {
                "fieldID": 7,
                "isGroup": false,
                "itemDisplayName": "Numerical2",
                "items": [],
                "__deleteConditions": false
              }
            ],
            "__deleteConditions": false
          },
          {
            "fieldID": 6,
            "isGroup": false,
            "itemDisplayName": "Apellidos",
            "items": [],
            "__deleteConditions": true
          }
        ],
        "__deleteConditions": false
      }
    ]
  }
];

// 执行过滤
const filteredArray = filterDeleteConditions(originalArray);
console.log(filteredArray);

代码逻辑说明

  1. 层级筛选:使用Array.filter遍历当前层级的对象,直接排除__deleteConditions为true的项;
  2. 递归处理子项:对于每个保留的对象,检查是否存在items子数组,若存在则递归调用过滤函数,更新该对象的items属性;
  3. 保留合法对象:所有未标记删除、且完成子项过滤的对象会被保留并返回。

如果需要避免修改原数组,可以在过滤前对原数组做深拷贝:

const copiedArray = JSON.parse(JSON.stringify(originalArray));
const filteredArray = filterDeleteConditions(copiedArray);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:35:42