我正在尝试对一个对象数组递归地运行一个reduce方法。
我从一个字符串开始,推送与该字符串匹配的对象,然后我看到条目报告的对象是什么
。一旦我得到该对象,我就推送它,然后kepp递归地检查对象报告的对象是什么
直到它达到最大秩
(本例为3)。
但它不会超越第一个。
null
const data = [
{
Name: 'Peter',
ReportsTo: '',
Rank: 1
},
{
Name: 'Tom',
ReportsTo: 'Peter',
Rank: 2
},
{
Name: 'Maria',
ReportsTo: 'Tom',
Rank: 3
},
{
Name: 'John',
ReportsTo: 'Peter',
Rank: 3
},
{
Name: 'Fiona',
ReportsTo: 'Maria',
Rank: 4
}
]
const findManager = (person) => data.reduce((total, current) => {
if (current.Name === person) {
total.push(current)
if (current.Rank > 2) {
findManager(current.ReportsTo)
}
}
return total
}, [])
console.log(findManager('Fiona'))
.as-console-wrapper { max-height: 100% !important; top: 0; }
null
期望的输出将是所有低于3并且在本例中管理fiona
的对象
[
{ Name: 'Fiona', ReportsTo: 'Maria', Rank: 4 },
{ Name: 'Maria', ReportsTo: 'Tom', Rank: 3 },
{ Name: 'Tom', ReportsTo: 'Peter', Rank: 2 }
]
我并不认为在这里使用reduce
有什么意义。reduce
旨在从一系列值中提供一些组合结果,但您只是在寻找一个值(并使用一个副作用来实现它)。
我认为这是一个更好的做法:
null
const data = [
{
Name: 'Peter',
ReportsTo: '',
Rank: 1
},
{
Name: 'Tom',
ReportsTo: 'Peter',
Rank: 2
},
{
Name: 'Maria',
ReportsTo: 'Tom',
Rank: 3
},
{
Name: 'John',
ReportsTo: 'Peter',
Rank: 3
},
{
Name: 'Fiona',
ReportsTo: 'Maria',
Rank: 4
}
]
const findManagers = (name) => {
const foundPerson = data.find(({ Name }) => Name === name);
return foundPerson.Rank > 2
? [foundPerson, ...findManagers(foundPerson.ReportsTo)]
: [foundPerson];
};
console.log(findManagers('Fiona'))
.as-console-wrapper { max-height: 100% !important; top: 0; }
我认为.reduce
在这里不是合适的工具,因为您试图在数组的给定迭代中找到数组中的一个项。使用.find
或普通循环。然后您需要使用递归调用的结果--一种方法是使用第二个参数,即结果数组,它被传递并推送到:
null
const data=[{Name:"Peter",ReportsTo:"",Rank:1},{Name:"Tom",ReportsTo:"Peter",Rank:2},{Name:"Maria",ReportsTo:"Tom",Rank:3},{Name:"John",ReportsTo:"Peter",Rank:3},{Name:"Fiona",ReportsTo:"Maria",Rank:4}];
const findManagers = (name, results = []) => {
const person = data.find(p => p.Name === name);
results.push(person);
if (person.Rank > 2) {
findManagers(person.ReportsTo, results)
}
return results;
};
console.log(findManagers('Fiona'))
.as-console-wrapper { max-height: 100% !important; top: 0; }
我有以下问题: 编写一个递归静态方法isSubstring,签名如下- 获取两个字符串-s1、s2,如果s2是s1的子字符串,则返回true。 该方法应该是递归的,完全不使用迭代。也可以使用您编写的任何其他方法(如果您编写的话)。 正确的答案不会改变方法类型签名/注释(即使通过重载也不会)。 您只能在解决方案中使用以下方法: 公共字符字符(int i) 公共int长度() 公共字符串子字符串(in
标准 ML 没有多态递归。在模块语言中添加递归允许我们使用内函子的固定点将多态递归恢复为一种特殊情况。例如: 众所周知,多态递归使得类型推理不可判定。然而,函子定义已经包含部分类型信息,即其参数的签名。这些信息足以使类型推理再次可判定吗?
来自Python的递归追加列表函数,试图递归地获取与文件结构相关的权限列表。 另一种情况是,A=允许,R=限制 输出将是[True,True,False,False,True,True,True]
查看我在某处(这里是游乐场)找到的这个Typescript4.2片段: 我的头不能绕着它。TS如何处理这件事?它怎么不卡在无限递归里?具体地说,对于和的情况,悬停在变量上显示TS将类型解析为和。这是怎么回事?
我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?
(Scala 2.11.8) 我有一个类似GenTableLike的特征,具有复杂的自递归类型签名,它定义了连接兼容表实现的方法。我还有一个层次结构 下面是一个稍微简化的片段,其中问题仍然存在: 我是不是做错了什么? 自类型和转置类型用于定义函数返回类型。我还有一个IndexedTable实现定义如下,所以我不能返工自类型以接受3个参数