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

从层级对象数组中移除structure属性为undefined的对象

移除层级对象数组中structure为undefined的元素

你需要处理一个嵌套的对象数组,移除所有structure属性值为undefined的对象——不管是顶层无子女的匹配对象,还是嵌套在子层级里的,对吧?这里有个简洁的递归方案可以解决这个问题:

首先先看你的原始数组:

var a = [
  { value: 'Some data', structure: 'linear', id: 0, children: [
    { id: 1, value: 'Some data', structure: undefined },
    { id: 2, value: 'Some data', structure: 'linear', children: [
      { id: 4, value: 'Some data', structure: undefined }
    ] }
  ] },
  { id: 5, structure: undefined, value: 'Some data' }
];

方案1:直接过滤(会修改原对象)

这个方法用递归遍历数组,筛选出符合条件的元素,同时处理子层级:

function filterUndefinedStructure(arr) {
  return arr.filter(item => {
    // 直接排除structure为undefined的元素
    if (item.structure === undefined) {
      return false;
    }
    // 如果有子元素,递归处理子数组
    if (item.children) {
      item.children = filterUndefinedStructure(item.children);
    }
    return true;
  });
}

// 调用函数得到结果
const filteredArray = filterUndefinedStructure(a);
console.log(filteredArray);

方案2:无副作用版本(不修改原数组/对象)

如果你不想改动原始数据,可以用reduce来构建全新的数组和对象,避免副作用:

function filterUndefinedStructure(arr) {
  return arr.reduce((result, currentItem) => {
    // 跳过structure为undefined的元素
    if (currentItem.structure === undefined) {
      return result;
    }
    // 拷贝当前元素,避免修改原对象
    const newItem = { ...currentItem };
    // 递归处理子元素(如果有的话)
    if (newItem.children) {
      newItem.children = filterUndefinedStructure(newItem.children);
    }
    // 将处理后的元素加入结果数组
    result.push(newItem);
    return result;
  }, []);
}

const filteredArray = filterUndefinedStructure(a);
console.log(filteredArray);

结果说明

两种方案处理后,最终的数组都会是这样的:

[
  {
    value: 'Some data',
    structure: 'linear',
    id: 0,
    children: [
      { id: 2, value: 'Some data', structure: 'linear', children: [] }
    ]
  }
]
  • 顶层的id5元素因为structure是undefined被移除
  • 子层级里的id1元素同样被移除
  • id2的子元素id4也被过滤掉,所以id2的children变成空数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:05