【发布时间】:2015-08-19 12:42:29
【问题描述】:
我有这个递归函数,它旨在递归地遍历容器对象的级别并检查它们是否打开。同时,我需要返回一个计数器,该计数器为每个级别的嵌套容器递增,其中包含一个未打开的容器。
所以容器结构可能看起来像这样(但是函数需要是动态的):
container {
open: true,
containers: [
{
open: false,
containers: [
{
open: false,
containers: [
]
},
{
open: false,
containers: [
]
},
{
open: false,
containers: [
]
},
]
},
{
open: true,
containers: [
{
open: false,
containers: [
]
},
{
open: true,
containers: [
]
},
{
open: false,
containers: [
]
},
]
}
]
}
目前我已经编写了一个函数,它将遍历 4 级容器进行检查,但我想让它尽可能长时间地运行。
function checkChildren(container) {
var x = 0;
if(closedCheck(container)) {
x++;
if(loopCheck(closedCheck(container), closedCheck)) {
x++;
if(loopCheck(loopCheck(closedCheck(container), closedCheck), closedCheck)) {
x++;
if(loopCheck(loopCheck(loopCheck(closedCheck(container), closedCheck), closedCheck), closedCheck)) {
x++;
}
}
}
}
return x;
function closedCheck(container) {
if(typeof container.containers !== 'undefined') {
return container.containers.filter(function(val) {
return val.open === false;
})
} else return false;
}
function loopCheck(containers, callback) {
return containers.filter(callback);
}
}
t 遍历容器的每一层。例如,第一级是根 container.containers。第二级包括第一级中每个容器中的“容器”数组。对于具有“打开 === false”的容器的每个级别,计数器都会递增。在这种情况下,计数器是根据迭代或条件增加或减少的数字。预期输出是代表该计数器的数字。因此,如果我要为根容器调用此函数。结果将是 2,因为下面两层是一个封闭的容器。
有没有人知道如何简化它并使其更具动态性?
谢谢!
【问题讨论】:
-
预期输出是什么?
-
"一个计数器,对于每个级别的嵌套容器都有一个未打开的容器'
-
@Rorschach120:我相信这对你来说很有意义,但对其他人来说却不是。你能解释清楚一点吗?对于您给出的示例,您应该执行什么功能以及输出应该是什么?是
2吗?或3?或6? -
遍历容器的每一层。例如,第一级是根 container.containers。第二级包括第一级中每个容器中的“容器”数组。对于具有“打开 === false”的容器的每个级别,计数器都会递增。在这种情况下,计数器是根据迭代或条件增加或减少的数字。预期输出是代表该计数器的数字。因此,如果我要为根容器调用此函数。结果将是 2,因为下面两层是一个封闭的容器。
-
The result would be 2 since two levels down there is a closed container.这确实与您最初所说的不符。听起来您只是想知道 deepest 封闭容器有多少层。那是对的吗?即使那个容器本身就在一个封闭的容器中?
标签: javascript recursion functional-programming