You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时过滤多层嵌套对象数组中的title属性?

过滤嵌套对象数组的title属性(包含子元素)

现有嵌套对象数组结构,需根据searchValue过滤整个数组,要求同时匹配顶层title与子数组elems中的title。当前代码仅能过滤顶层title,无法匹配elems内的title,期望输入about或portfolio时显示第一个分类对象,输入services或jobs时显示第二个。

当前代码:

state: {
    searchValue: "",

    categories: [
        {
            title: "about",
            open: false,
            elems: [{ title: "portfolio" }],
        },
        {
            title: "services",
            open: false,
            elems: [{ title: "jobs" }],
        },
    ],
},

getters: {
    categories(state) {
        return state.categories.filter(item => {
            return item.title.toLowerCase().includes(state.searchValue.toLowerCase())
        })
    }
}

解决方案

修改getter的过滤逻辑,同时检查当前项的title和**elems数组中是否存在匹配的title**,用Array.some()判断子数组是否有符合条件的元素:

getters: {
    categories(state) {
        const search = state.searchValue.toLowerCase();
        return state.categories.filter(item => {
            // 匹配顶层title
            const matchesTop = item.title.toLowerCase().includes(search);
            // 匹配elems中的任意一个title
            const matchesElems = item.elems.some(elem => 
                elem.title.toLowerCase().includes(search)
            );
            // 满足任一条件则保留该分类
            return matchesTop || matchesElems;
        })
    }
}

逻辑说明

  • 提前将搜索值转小写,避免重复转换提升性能
  • matchesTop判断当前分类的顶层title是否匹配搜索值
  • matchesElems通过some()遍历elems数组,只要有一个元素的title匹配就返回true
  • 两个条件用||连接,满足任意一个就保留该分类对象

内容的提问来源于stack exchange,提问作者Synchro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:55:31