我尝试改进以下代码:Find path in tree by direct path
const None =
Symbol ()
const findPath = (tree = [], names = [], r = []) =>
tree.length && names.length
? tree.flatMap(branch => findPath1(branch, names, r))
: tree.length || names.length
? []
: [ r ]
const findPath1 = ({ name = "", tree = [] } = {}, [ q = None, ...more ] = [], r = []) =>
name === "" && q === None
? [ r ]
: name === "" || q === None || name !== q
? []
: findPath(tree, more, [ ...r, q ])
findPath(data, ["name1", "name4", "name5"])
我要这个data
:
const data = [
{
'name': 'name1',
'tree': [
{'name': 'name2'},
{'type': 'type1'},
{
'name': 'name4',
'tree': [
{'name': 'name5'},
{'type': 'type2'}
]
},
{'name': 'name7'}
]
},
{
'name': 'name8',
'tree': [
{'type': 'number'}
]
}
];
const types = [
{
'type': 'number',
'tree': [
{
'name': 'number1',
'tree': [
{
'type': 'number'
}
]
},
{
'name': 'number2',
'tree': [
{
'type': 'number'
}
]
}
]
},
{
'type': 'type1',
'error': true,
'tree': [
{
'name': 'name1',
'tree': [
{
'type': 'type2'
}
]
}
]
},
{
'type': 'type2',
'tree': [
{
'name': 'name3',
'end': true,
'tree': [
{
'type': 'type3'
}
]
},
{
'type': 'type3'
}
]
},
{
'type': 'type3',
'end': true,
'tree': [
{
'name': 'name4'
},
{
'name': 'name6'
}
]
},
];
预期输出:
findPath(data, ["name1", "name1"]); // ["name1", "name1"]
findPath(data, ["name1", "name1", "name3"]); // []
findPath(data, ["name1", "name1", "name3", "name4"]); // ["name1", "name1", "name3", "name4"]
findPath(data, ["name8", "number1", "number1", "number2"]); // ["name8", "number1", "number1", "number2"]
类型不能有数量限制。
但是如果有end: true
,则必须继续,所以name
或type
。
我所有的尝试都行不通。
我对另一个主题的功能有一些疑问。
1)r
是什么意思?
2)cost None = Symbol();
是什么意思?
3)q
是什么意思?
4)...more
是什么意思?
感谢您的帮助或任何提示!