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

Laravel(PHP)中如何从嵌套JSON删除指定ID节点及其子节点

删除嵌套JSON数组中指定ID的节点及其子节点

针对你这个需求,我给你两种主流编程语言的实现方案,都是通过递归处理嵌套结构,确保彻底删除目标节点及其所有子节点:

JavaScript 实现

function removeNodeById(arr, targetId) {
  // 过滤顶层数组,同时递归处理子节点
  return arr.filter(item => {
    // 匹配到目标ID,直接排除该节点
    if (item.id === targetId) return false;
    // 如果有子节点数组,递归清理子节点中的目标ID
    if (item.children && Array.isArray(item.children)) {
      item.children = removeNodeById(item.children, targetId);
    }
    return true;
  });
}

// 你的原始数据
const originalData = [{"id":3},{"id":4,"children":[{"id":5,"children":[{"id":6}]}]}];
// 执行删除操作
const result = removeNodeById(originalData, 4);
console.log(result); // 输出: [{"id":3}]

逻辑说明

  • 用filter方法遍历顶层数组,直接剔除ID匹配的节点
  • 对保留的节点,若存在children数组则递归调用函数,确保深层嵌套的目标节点也能被清理
  • 该方法返回新数组,不会修改原始数据,避免意外副作用

Python 实现

def remove_node_by_id(arr, target_id):
    processed_arr = []
    for item in arr:
        # 跳过目标ID的节点
        if item['id'] == target_id:
            continue
        # 递归处理子节点数组
        if 'children' in item and isinstance(item['children'], list):
            item['children'] = remove_node_by_id(item['children'], target_id)
        processed_arr.append(item)
    return processed_arr

# 原始数据
original_data = [{"id":3},{"id":4,"children":[{"id":5,"children":[{"id":6}]}]}]
# 执行删除操作
result = remove_node_by_id(original_data, 4)
print(result) # 输出: [{'id': 3}]

注意点

  • 假设你的JSON结构中每个节点的id是唯一的,如果存在重复ID,该方法会删除所有匹配的节点
  • 如果需要直接修改原始数据而非返回新数组,可以调整代码逻辑,但通常不推荐这种做法,容易引发数据混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:34:41