我有一个包含键,值和子代的类
class Container{
key: string,
value: string,
children: Container[]
}
function searchKey(container: Container, key:string){
if (container.key == key) {
return container;
}
else if (container.children.length>0){
for (let child of container.children) {
let found = searchKey(child, key);
if (found != null) {
return found;
}
}
}
return null;
}
我将提供给searchKey()函数的输入将是一个包含深层对象的数组,我想获得所提供的关键参数的值。但是当前的searchKey()函数不接受数组。如何使用数组作为输入?
答案 0 :(得分:1)
您的searchKey()
函数目前接受一个Container
并检查其是否与key
匹配。如果失败,它会遍历children
Container
个Container
数组,并在每个数组上递归调用。
如果您只打算使用Container
的数组来调用该函数,并且永远不需要传入单个function searchKey(containers: Container[], key: string): Container | null {
if (containers.length > 0) {
for (let container of containers) {
if (container.key == key) {
return container;
} else {
let found = searchKey(container.children, key);
if (found != null) {
return found;
}
}
}
}
return null;
}
,那么您可以将函数内外翻像这样:
searchKey()
(我试着保持上述功能与原作相同。)
这个Container
函数以迭代Container
的数组开始。它会检查每个key
是否有children
匹配,如果找不到,则会在Container | Container[]
数组上递归调用。
当然,还有其他方法可以做到这一点。示例:
searchKey()
个参数的双重用途函数; Container
调用虚拟children
对象,其<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
是您想要的数组。哪一个最好取决于您的使用案例。
希望有所帮助;祝你好运。