【发布时间】:2021-06-11 08:52:20
【问题描述】:
我正在尝试在对象数组上递归运行 reduce 方法。
我从一个字符串开始并推送与该字符串匹配的对象,然后我看到那个条目ReportsTo 的对象,一旦我得到那个对象我推送它并继续递归检查那个对象ReportsTo 下一个直到它到达在这种情况下,最大 Rank 为 3。
但它并没有超越第一个。
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; }
期望输出将是所有小于 3 且在本例中管理的对象 Fiona
[
{ Name: 'Fiona', ReportsTo: 'Maria', Rank: 4 },
{ Name: 'Maria', ReportsTo: 'Tom', Rank: 3 },
{ Name: 'Tom', ReportsTo: 'Peter', Rank: 2 }
]
【问题讨论】:
-
当您对某个值 (
if (...) { findManager(...) }) 不感兴趣时,为什么findManager()会返回某些值 (return total)? -
但是我有兴趣返回下一个,只要
Rank高于 3,我必须在某个时候返回总数,对吧? -
那么……为什么不返回总数?
-
我认为根据回复,我使用了错误的函数来满足我的需要,但出于好奇,只返回总数是什么意思?,我是。
-
不在
if ( ... )块中
标签: javascript arrays ecmascript-6 javascript-objects ecmascript-2016