[英]Deep filter objects in javascript array
從下面的代碼中,我只需要返回包含meta.menu
的對象,同時保留結構。
所以在下面的情況下,只有帶有"panel.users.view"
的對象會被刪除。 我已經嘗試制作一個遞歸函數來遍歷它,但我無法弄清楚如何無限地遍歷它,因為可能有更多的對象。 我不知道一個路由對象可以達到多少級。
我還查看了lodash和collect.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.