javascript - 深度过滤 JavaScript 数组中的对象

标签 javascript vue.js

在下面的代码中,我只需要返回其中包含 meta.menu 的对象,同时保留结构。

因此,在下面的情况下,只有带有“panel.users.view”的对象才会被删除。我尝试过创建一个递归函数来遍历它,但我不知道如何无限遍历它,因为可能有更多的对象。我不知道路线对象可以达到多少层深度。

我还查看了 lodashcollect.js 以查看是否有可用于此目的的函数,但我无法找到解决方案我自己的。

非常感谢您的帮助,非常感谢!

const routes = [
    {
        path: "/panel",
        name: "panel",
        redirect: { name: "panel.dashboard" },
        component: {},
        children: [
            {
                path: "/dashboard",
                name: "panel.dashboard",
                component: {},
                meta: {
                    menu: "main"
                },
            },
            {
                path: "/users",
                name: "panel.users",
                redirect: { name: "panel.dashboard" },
                component: {},
                children: [
                    {
                        path: "list",
                        name: "panel.users.list",
                        component: {},
                        meta: {
                            menu: "main"
                        },
                    },
                    {
                        path: "view/:user_id",
                        name: "panel.users.view",
                        component: {},
                    },
                ],
            }
        ],
    }
];

最佳答案

你可以想象一个看起来像这样的递归函数。

const res = [];
function findMeta(rs) {
  rs.forEach(r => {
      for (let [key, value] of Object.entries(r)) {
        //console.log(`${key}`, value);
                if(key === "children") findMeta(value);
                if(key === "meta") res.push(r);
      }
  })
  return res;
}

const routes = [
    {
        path: "/panel",
        name: "panel",
        redirect: { name: "panel.dashboard" },
        component: {},
        children: [
            {
                path: "/dashboard",
                name: "panel.dashboard",
                component: {},
                meta: {
                    menu: "main"
                },
            },
            {
                path: "/users",
                name: "panel.users",
                redirect: { name: "panel.dashboard" },
                component: {},
                children: [
                    {
                        path: "list",
                        name: "panel.users.list",
                        component: {},
                        meta: {
                            menu: "main"
                        },
                    },
                    {
                        path: "view/:user_id",
                        name: "panel.users.view",
                        component: {},
                    },
                ],
            }
        ],
    }
];

const res = [];
function findMeta(rs) {
  rs.forEach(r => {
      for (let [key, value] of Object.entries(r)) {
        //console.log(`${key}`, value);
				if(key === "children") findMeta(value);
				if(key === "meta") res.push(r);
      }
  })
  return res;
}

console.log(findMeta(routes))

关于javascript - 深度过滤 JavaScript 数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60292441/

相关文章:

javascript - 如何根据输入的json动态加载html元素?

javascript - 如何在继电器现代中设置初始变量?

vue.js - vue js中如何访问window对象?

vue.js - 未调用 Vue prop 验证

javascript - 从 laravel blade 调用 vue 方法

javascript - 迭代 JSON 以仅更新单个元素

javascript - 在javascript中获取控件的 "id"值

javascript - 如何在页面顶部显示我的 "bar"div?

javascript - 如何使用 Moment.js 获取今天和每月最后一天之间的天数?

node.js - 不使用模板引擎的 Koa 渲染