如何删除嵌套对象数组中value为null或空字符串的节点并保留子节点
你可以用递归遍历树结构的方式实现该需求,核心逻辑是自底向上处理每个节点,判断节点value有效性后决定是否保留节点、或是将其子节点提升至父层级,具体实现代码如下:
function filterEmptyValueNodes(nodes) { const result = []; for (const node of nodes) { // 优先递归处理当前节点的所有子节点 const processedChildren = node.children ? filterEmptyValueNodes(node.children) : []; // 判断当前节点value是否合法 if (node.value !== null && node.value !== '') { // 合法则保留节点,替换为处理后的子节点 const newNode = {...node}; // 子节点为空时可按需选择保留空数组或删除children字段,以下为删除空children的逻辑 if (processedChildren.length) { newNode.children = processedChildren; } else { delete newNode.children; } result.push(newNode); } else { // 不合法则直接将子节点提升至当前层级,跳过当前节点 result.push(...processedChildren); } } return result; } // 调用示例:传入原始数据即可得到处理后的结果 const processedData = filterEmptyValueNodes(originalApiData);
该方案支持任意嵌套层级的节点处理,默认浅拷贝节点属性,如果你需要避免修改原数据对象,可以将...node替换为深拷贝逻辑即可。
内容的提问来源于stack exchange,提问作者nihar
相关产品推荐
相关产品推荐

