为了账号安全,请及时绑定邮箱和手机立即绑定

用于搜索实现的多级数组过滤器

用于搜索实现的多级数组过滤器

慕容708150 2022-07-08 10:49:10
我正在尝试使用多级数组实现搜索。考虑我有如下 JSON 多级数组const testData = [        {            menu: 'Test',            submenu: [                {                    menu: 'Test1',                },                {                    menu: 'Test2',                    submenu: [                        {                            menu: 'Test2.1',                        },                        {                            menu: 'Test2.2',                        },                        {                            menu: 'Test2.3',                        },                    ],                },            {        menu: 'TestNew',        submenu: [            {                menu: 'TestNew1.1',            },            {                menu: 'TestNew1.2'            },            {                menu: 'TestNew1.3',            },        ],    },            ],        }]如果我尝试搜索单词 Test2.3,我有搜索框,我希望 JSON 采用以下格式const testData = [        {            menu: 'Test',            submenu: [                {                    menu: 'Test2',                    submenu: [                        {                            menu: 'Test2.3'                        },                    ],                },            ],        }]我已经引用了链接Using array.filter down multiple levels但它不符合我的输出。它返回所有子菜单,如下所示const testData = [        {            menu: 'Test',            submenu: [                {                    menu: 'Test1',                },                {                    menu: 'Test2',                    submenu: [                        {                            menu: 'Test2.1',                        },                        {                            menu: 'Test2.2',                        },                        {                            menu: 'Test2.3',                        },                    ],                },            ],        }]我们还有其他方法可以满足我的期望吗?提前致谢
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

您可以使用递归方法,reduce该方法仅返回找到目标值的子菜单元素并过滤掉其他元素。


const data = [{"menu":"Test","submenu":[{"menu":"Test1"},{"menu":"Test2","submenu":[{"menu":"Test2.1"},{"menu":"Test2.2"},{"menu":"Test2.3"}]},{"menu":"TestNew","submenu":[{"menu":"TestNew1.1"},{"menu":"TestNew1.2"},{"menu":"TestNew1.3"}]}]}]


function search(data, value) {

  return data.reduce((r, e) => {

    const object = { ...e }

    const result = search(e.submenu || [], value)

    if (result.length) object.submenu = result

    if (e.menu == value || result.length) r.push(object)

    return r;

  }, [])

}


console.log(search(data, 'Test2.1'))

console.log(search(data, 'TestNew1.3'))


查看完整回答
反对 回复 2022-07-08
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号