微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图找到每个父元素的嵌套元素数

如何解决试图找到每个父元素的嵌套元素数

const mainQuery = [
{
  id: 1,type: "and",rules: [
    { id: 2,type: "condition",rules: 1 },{ id: 3,rules: 2 },{
      id: 4,rules: [
        { id: 5,rules: 3 },{
          id: 6,rules: [
            { id: 7,rules: 4 },{ id: 8,rules: 5 }
          ]
        }
      ]
    },{
       id: 9,rules: [
         { id: 10,rules: 6 },{ id: 11,rules: 7 }
       ]
     }
  ]
}];

试图找到每个父节点下总查询的深度/或计数。 例如

  1. mainQuery[0] 总共应该有 7 个条件
  2. mainQuery[0].rules[2] 总共应该有 3 个条件

我试图避免每次都运行多个循环。有人可以提供更好的解决方案吗?

解决方法

这样的事情怎么样? getNumOfConditions 函数使用递归循环遍历给定对象中的所有对象,并计算类型为“条件”的对象:

const mainQuery = [
{
  id: 1,type: "and",rules: [
    { id: 2,type: "condition",rules: 1 },{ id: 3,rules: 2 },{
      id: 4,rules: [
        { id: 5,rules: 3 },{
          id: 6,rules: [
            { id: 7,rules: 4 },{ id: 8,rules: 5 }
          ]
        }
      ]
    },{
       id: 9,rules: [
         { id: 10,rules: 6 },{ id: 11,rules: 7 }
       ]
     }
  ]
}];

function getNumOfConditions(obj) {
  var count = 0;
  if (typeof obj.rules == "number" && obj.type == "condition") {
    return 1;
  }
  else {
    for (var i=0;i<obj.rules.length;i++) {
      count += getNumOfConditions(obj.rules[i]);
    }
  }
  return count;
}

console.log(getNumOfConditions(mainQuery[0]));  // = 7
console.log(getNumOfConditions(mainQuery[0].rules[2]));  // = 3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。