如何递归移除数组中的EMPLOYEE对象并添加至新数组?
解决方案
你可以在收集EMPLOYEE对象的同时,从原数组中移除它们。需要注意的是,删除数组元素后要调整遍历索引,避免跳过后续元素。以下是修改后的代码:
const employees = []; const extractEmployees = (members) => { for(let i = 0; i < members.length; i++) { const member = members[i]; if(member.type === 'EMPLOYEE') { employees.push(member); // 从原数组移除当前EMPLOYEE对象 members.splice(i, 1); // 索引减1,抵消数组长度减少的影响,防止跳过下一个元素 i--; } else if(member.children && member.children.length > 0) { // 递归处理MANAGER的子节点数组 extractEmployees(member.children); } } }; extractEmployees(members);
代码说明
- 遇到
EMPLOYEE类型对象时,用splice(i, 1)从原数组中移除该元素,同时将索引i减1,保证遍历不会遗漏后续元素。 - 仅对
MANAGER类型的对象递归处理其children数组,因为EMPLOYEE对象已被移除,且根据你的数据结构,它们的children为空数组,无需额外处理。
执行完成后,employees数组会包含所有被移除的EMPLOYEE对象,原members数组则仅保留MANAGER的层级结构。
内容的提问来源于stack exchange,提问作者Michael Lynch
相关产品推荐
相关产品推荐

