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

如何使用filter()函数删除嵌套数组中的指定元素

解决嵌套数组中删除指定ID元素的问题

我明白你想在嵌套数组里删掉{id: 111,name: "A"}这个对象,但不知道怎么结合filter()处理嵌套结构。其实分两种场景处理就好,我给你一步步讲清楚:

场景1:单层嵌套(父元素包含children子数组)

假设你的原始数据结构是类似这样的:

const originalData = [
  { id: 1, name: "Group 1", children: [{ id: 111, name: "A" }, { id: 222, name: "B" }] },
  { id: 2, name: "Group 2", children: [{ id: 333, name: "C" }] }
];

要删除children里id为111的元素,你可以用map()遍历主数组,对每个元素的children属性单独用filter()过滤:

// 生成新数组,不修改原数据
const updatedData = originalData.map(item => ({
  // 复制当前元素的所有属性
  ...item,
  // 过滤children数组,排除id=111的对象
  children: item.children.filter(child => child.id !== 111)
}));

如果主数组本身也可能存在id=111的元素,那主数组也要加一层filter():

const updatedData = originalData
  .filter(parent => parent.id !== 111)
  .map(item => ({
    ...item,
    children: item.children.filter(child => child.id !== 111)
  }));

场景2:深层嵌套(子元素还有自己的children数组)

如果你的数组是多层嵌套(比如子元素下还有嵌套的子数组),那就要用递归函数来遍历每一层:

// 递归函数:遍历任意层级的数组,删除指定ID的元素
function removeTargetItem(arr, targetId) {
  return arr.filter(item => {
    // 如果当前元素不是目标ID,就处理它的children(如果存在)
    if (item.id !== targetId) {
      // 检查是否有children数组,有的话递归处理
      if (item.children && Array.isArray(item.children)) {
        item.children = removeTargetItem(item.children, targetId);
      }
      // 保留这个元素
      return true;
    }
    // 如果是目标ID,直接过滤掉
    return false;
  });
}

// 使用示例
const updatedData = removeTargetItem(originalData, 111);

如果你不想修改原数据(保持不可变性),可以修改递归函数,每次都创建新对象:

function removeTargetItem(arr, targetId) {
  return arr
    .map(item => {
      // 复制当前元素,避免修改原对象
      const newItem = { ...item };
      // 递归处理children(如果有)
      if (newItem.children && Array.isArray(newItem.children)) {
        newItem.children = removeTargetItem(newItem.children, targetId);
      }
      return newItem;
    })
    .filter(item => item.id !== targetId);
}

这样不管嵌套多少层,都能精准删掉id为111的元素啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:47:45