如何通过引用在函数内修改数组?改写递归过滤函数示例
改写后的函数实现
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
相关产品推荐
相关产品推荐

