Javascript 为什么递归不返回新对象?
我有一个递归函数,它迭代一棵树并删除注册表属性不为true的节点Javascript 为什么递归不返回新对象?,javascript,typescript,Javascript,Typescript,我有一个递归函数,它迭代一棵树并删除注册表属性不为true的节点 function reduceNodesRegistry(source: any) { if (!source.registry) return source; return { ...source, children: source.children && source.children .map(reduceNo
function reduceNodesRegistry(source: any) {
if (!source.registry) return source;
return {
...source,
children:
source.children &&
source.children
.map(reduceNodesRegistry)
.filter((item: any) => item.registry),
};
}
console.clear();
console.log("##########");
console.log(reduceNodesRegistry(source));
带模型的完整代码
为什么函数不隐藏注册表为false的节点
第1版:
reduceNodesRegistry(source: any) {
if (typeof source.registry !== "undefined" && source.registry === false)
return source;
return {
...source,
children:
source.children &&
source.children
.map(this.reduceNodesRegistry.bind(this))
.filter(
(item: any) =>
typeof item.registry === undefined || item.registry === true
),
};
}
它不会隐藏注册表为false的节点
第三,我尝试:
reduceNodesRegistry(node: any) {
return {
...node,
children:
node.children &&
node.children
.map(this.reduceNodesRegistry.bind(this))
.filter(
(node: any) => node.registry || node.registry === "undefined"
),
};
}
source
没有truthy注册表
,因此您的reduceNodeRegistry
直接返回source
,而无需遍历子属性
let source = {
"name": "",
"children": [...]
}
source
没有truthy注册表
,因此您的reduceNodeRegistry
直接返回source
,而无需遍历子属性
let source = {
"name": "",
"children": [...]
}
与未定义的比较应为以下任一项:
typeof item.registry === “undefined”
或
与未定义的比较应为以下任一项:
typeof item.registry === “undefined”
或
第2行表示如果注册表为false,则返回输入。一旦返回被命中,函数中的执行就会停止。好吧,我试着注释这一行,如果这种情况下我得到的结果是空的,你的意思是我应该使用return代码>?第2行表示如果注册表为false,则返回输入。一旦返回被命中,函数中的执行就会停止。好吧,我试着注释这一行,如果这种情况下我得到的结果是空的,你的意思是我应该使用return代码>?是的,我知道了。因此,我可以在.filter()
中条件(source.registry==undefined或source.registry==true)并删除第二行,对吗?检查我的编辑。它仍然不隐藏节点,其中注册表:false
是的,我得到了这个。因此,我可以在.filter()
中条件(source.registry==undefined或source.registry==true)并删除第二行,对吗?检查我的编辑。它仍然不会隐藏注册表为false的节点