簡體   English   中英

javascript數組中的深層過濾對象

[英]Deep filter objects in javascript array

從下面的代碼中,我只需要返回包含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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM