0
我正在嘗試爲我的應用程序編寫一個簡單的模板管理器。這個想法是,所有的模板將被列在一個多維的對象/數組中,然後每個模板都將被某個函數解析。下面是我的模板對象的樣子:遞歸迭代地處理對象並將父母追加到每個孩子
var tpls = {
home: 'home',
about: 'about',
shop: {
basket: 'basket',
checkout: {
paypal: 'paypal',
sagepay: 'sagepay',
}
},
user: {
profile: 'profile',
settings: 'settings',
}
};
這裏是我到目前爲止已經編寫的功能:
function listTemplates(o, parent, templates) {
var templates = templates || [];
_.each(o, function (v, k, l) {
if (Object.keys(v).length > 0 && typeof v === 'object') {
listTemplates(v, k, templates);
} else if (typeof v === 'string') {
var n = (typeof parent === 'string') ? parent + '/' + k : k;
templates.push(n);
}
});
return templates;
};
它我要它做什麼,但是我在努力弄清楚如何我可以追加嵌套父名到最終輸出,以達到以下數組:
["home", "about", "shop/basket", "shop/checkout/paypal", "shop/checkout/sagepay", "user/profile", "user/settings"]
目前,該功能輸出嵌套模板沒有他們的頂級的父母,像這樣:
["home", "about", "shop/basket", "checkout/paypal", "checkout/sagepay", "user/profile", "user/settings"]
任何幫助將不勝感激。
神聖的鱷梨醬!這工作。你介意多解釋一下爲什麼我也應該在第一種情況下通過它?似乎我一直在努力與遞歸... – goodpixels
'父'擁有絕對路徑的孩子。在你的代碼中,你只是發送當前的父母,這將是'結賬'爲'paypal',而不發送結帳的父母,這將是'商店'。因此,當您在結帳時循環播放孩子時,父母需要「購物/結帳」,而不僅僅是「結帳」。 –
對,我明白了。謝謝Seb! – goodpixels