在javascript递归函数中增加一个参数
我将以下数据存储在变量中:在javascript递归函数中增加一个参数,javascript,arrays,object,recursion,Javascript,Arrays,Object,Recursion,我将以下数据存储在变量中: let categories = [ { name: "a", selected: false, nodes: [ { name: "aa", selected: false }, { name: "ab", selected: true }, { name: "ac", sel
let categories = [
{
name: "a",
selected: false,
nodes: [
{
name: "aa",
selected: false
},
{
name: "ab",
selected: true
},
{
name: "ac",
selected: true
},
{
name: "ad",
selected: false
}
]
},
{
name: "b",
selected: false,
nodes: [
{
name: "ba",
selected: false
},
{
name: "bb",
selected: true
},
{
name: "bc",
selected: true
},
{
name: "bd",
selected: false
}
]
}
];
我想计算选择了多少项=true。
因此,我创建了以下函数:
function getSelected(categories, counter = 0) {
for (let index = 0; index < categories.length; index++) {
const category = categories[index];
if (category.selected) {
counter++;
}
if (category.nodes && category.nodes.length) {
category.nodes.forEach(cat => getSelected([cat], counter));
}
}
return counter;
}
但它总是返回0
您可以对所选节点和计数进行递归减少 常数 countSelected=s,o=>o.nodes | |[])。reducecountSelected,s+o.selected; 让类别=[{name:a,selected:false,nodes:[{name:aa,selected:false},{name:ab,selected:true},{name:ac,selected:true},{name:ad,selected:false},{name:b,selected:false,nodes:[{name:ba,selected:false},{name:bb true},{name:bc,selected:true},{name:bd,selected:false},},}, count=categories.reducecountSelected,0;
console.logcount 您可以对所选节点和计数进行递归减少 常数 countSelected=s,o=>o.nodes | |[])。reducecountSelected,s+o.selected; 让类别=[{name:a,selected:false,nodes:[{name:aa,selected:false},{name:ab,selected:true},{name:ac,selected:true},{name:ad,selected:false},{name:b,selected:false,nodes:[{name:ba,selected:false},{name:bb true},{name:bc,selected:true},{name:bd,selected:false},},}, count=categories.reducecountSelected,0; console.logcount 计数器是一个整数,所以它在这里按值传递。 将计数器设置为您希望从函数返回的结果,然后执行以下操作: 函数getSelectedcategories{ var计数器=0; 对于let index=0;index
console.loggetSelectedWithReturnValuecategoriesPS:节点的深度未知,因此如果我们有更深的节点,reduce将不起作用。它适用于所有嵌套节点属性,因为is使用递归。请查看countSelected的reduce。PS:节点的深度未知,因此如果有更深的节点,reduce将不起作用。它适用于所有嵌套节点属性,因为它使用递归。请查看所选计数的减少。