javascript - 在javascript递归函数中增加一个参数

标签 javascript arrays object recursion

我将以下数据存储在一个变量中:

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
      }
    ]
  }
];

我想统计有多少项目selected = 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

A working jsFiddle

最佳答案

您可以对节点进行递归归约并计算已选择

const
    countSelected = (s, o) => (o.nodes || []).reduce(countSelected, s + o.selected);

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 }] }],
    count = categories.reduce(countSelected, 0);

console.log(count);

关于javascript - 在javascript递归函数中增加一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59489569/

相关文章:

javascript - CORS header 'Access-Control-Allow-Origin' 缺失,但它存在于 header 中

javascript - 使用先前对象属性函数的值

c - 如何将二维数组传递给 C 函数

javascript - 你如何在 JavaScript 中获取对象的名称?

javascript - 如何在javascript中计算数组内的数组元素?

javascript - 如何在自动完成文本区域的 Jquery 函数中将变量分配为 Id

JavaScript 将具有特定结构的对象转换为数组

javascript - 了解类的属性

javascript - AngularJS 多维数组

java - 如何将参数添加到数组的末尾?