通过类型直接路径查找树中的路径

时间:2019-08-30 22:48:03

标签: javascript

我尝试改进以下代码: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,则必须继续,所以nametype

我所有的尝试都行不通。

我对另一个主题的功能有一些疑问。

1)r是什么意思?

2)cost None = Symbol();是什么意思?

3)q是什么意思?

4)...more是什么意思?

感谢您的帮助或任何提示!

0 个答案:

没有答案