javascript - 使用递归js在树状对象中查找最小值和最大值
问题描述
我正在尝试使用递归在树状对象中找到最小值和最大值,但我实际上并不了解如何找到这些值。此外,我的函数必须是纯函数,不能使用循环或 forEach。只有 map、reduce、filter 可用。所以这就是我的数据的样子:
const tree = {
children: [
{
children: [
{
children: [],
values: [15.667786122807836]
}
],
values: [35.77483035532576, 1.056418140526505]
},
{
children: [
{
children: [
{
children: [],
values: [67.83058067285563]
}
],
values: [98.89823527559626]
}
],
values: [51.49890385802418, 41.85766285823911]
},
],
values: [6.852857017193847, 28.110428400306265, 51.385186145220494]};
我正在尝试做这样的事情:
const min = graph => {
if (!graph.children.length && !graph.values.length) return;
if (!graph.children.length && graph.values.length) {
return Math.min(...graph.values);
}
return graph.children.map(el => {
const minValue = Math.min(...el.values);
min(el);
return minValue;
});
};
但这并不好。所以任何人都可以解释调用堆栈是如何工作的,也许给我一些很好的例子,并解释如何解决我的问题。感谢您的帮助,抱歉英语不好)。哦,还有))如何获得不同深度级别的两个节点之间的距离?
解决方案
我不是 JS 程序员,但我一直在寻求实践。这是我想出的:
const tree = {
children: [{
children: [{
children: [],
values: [15.667786122807836]
}],
values: [35.77483035532576, 1.056418140526505]
},
{
children: [{
children: [{
children: [],
values: [67.83058067285563]
}],
values: [98.89823527559626]
}],
values: [51.49890385802418, 41.85766285823911]
},
],
values: [6.852857017193847, 28.110428400306265, 51.385186145220494]
};
function treeMin(graph) {
if (graph.children.length == 0) return Math.min(...graph.values);
return Math.min(...graph.values,
graph.children.reduce((prev, cur) =>
Math.min(prev, treeMin(cur)), Number.MAX_SAFE_INTEGER
));
}
console.log(treeMin(tree));
我给函数起了一个名字来进行递归调用。它做的第一件事是检查是否没有孩子。如果不是,它只返回值的最小值。
如果有孩子,则返回最小值和调用reduce
孩子的结果。在内部reduce
,进行递归调用。
注意:它不处理values
为空的情况。这可以很容易地添加。
推荐阅读
- python-appium - 如何使用 Appium python 自动按下完成按钮
- reactjs - 使用 HOC 使用 div 自动包装所有链接和按钮
- ios - iOS:具有关键帧的交互式动画在手势结束时未正确恢复
- python - ValueError:为 plotly.graph_objs.Heatmap 类型的对象指定的属性无效:'scl'
- decomposition - 得到一个整数的素因子分解,
- javascript - 正则表达式匹配任一单词,但准确的单词
- c++ - 在 C/C++ 中快速获得 10 的 n(10^n) 次幂
- nginx - 烧瓶重定向在 Nginx 代理上搞砸了
- javascript - Javascript将日期舍入到最接近的完整日期
- excel - 是否可以将一系列单元格加入一个单元格并删除 0 值?