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

如何通过引用在函数内修改数组?改写递归过滤函数示例

改写后的函数实现
public recursiveFilterLayers(node: LayerNode[]): void {
  // 反向遍历数组,删除visible明确为false的节点(避免正向遍历索引偏移)
  for (let i = node.length - 1; i >= 0; i--) {
    const item = node[i];
    if (item.visible === false) {
      node.splice(i, 1);
      continue;
    }
    // 递归处理子节点(直接修改原children数组)
    if (item.children) {
      this.recursiveFilterLayers(item.children);
    }
  }
}

改写思路说明

  • 原函数通过filter生成新数组返回,现在改为原地修改原数组:使用splice直接删除不符合条件的节点,无需创建新数组。
  • 采用反向遍历数组,防止删除元素后索引错乱(正向遍历会导致后续元素索引偏移,漏处理部分节点)。
  • 递归处理子节点时,直接传入item.children的引用进行原地修改,不需要重新赋值。
  • 函数返回值改为void,调用时直接传入目标数组即可:recursiveFilterLayers(data);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:15:34