2012-09-27 218 views
1

我試圖遍歷書籤樹(分類到文件夾和子文件夾),並使用它們的「路徑」爲每個文件夾創建標籤列表。 - 存儲在「開發」>「JS」>「博客」書籤將有標籤映射爲['Dev, 'JS, 'Blogs']遞歸/嵌套函數 - 參數範圍

使用chrome.bookmarks.getTree結構的Chrome瀏覽器的默認之一,它看起來像這樣:

[{ 
    'title' : '', 
    children : [{ 
      'title' : 'a title', 
      'url' : 'http://www.example.com' 
     }, 
     { 
      'title' : 'a folder category', 
      'children' : [{...}] 
     }, 
    }] 
}]; 

。 ..和我的代碼是:

function processTreeNodes(tree, tags) { 
    console.log(tags); 
    var t = tags || []; 
    for (var i=0; i < tree.length; i++) { 
     processNode(tree[i], t); 
    } 
} 


function processNode(n, tags) { 
    if(n.children) { 
     tags.push(n.title); 
     //It's a group, loop over it 
     processTreeNodes(n.children, tags); 
    } else { 
     //Do something with the bookmark 
    } 
} 

chrome.bookmarks.get(function(bmTree) { 
    processTreeNodes(bmTree); 
}); 

什麼,我期望是爲console.log顯示

[ 'category1', 'subcat1', ...] 

然後

['category2, 'subcatA', ...] 

由我結束而終止得到的是

['category1, 'subcat1', ..., 'category2', 'subcatA', ...] 

它經歷和拉所有的信息,但是在我看來,當我退後一步了堆疊的'水平'的參數還沒有被保存..我認爲這可能是與遞歸/閉包,但我失去了!

對不起,如果這沒有意義,我正在努力讓我的頭像它,讓我知道,我可以嘗試進一步解釋,如果有必要!

+0

什麼是'arg'變量? – alnorth29

+0

@ alnorth29錯誤!我現在編輯它,哎呀! – Paul

回答

2

看起來你只是創建一個數組,然後傳遞給你所有的遞歸子函數。我會留下來編寫代碼,但看起來您需要在層次結構中的每個點克隆您的數組,以便您將引用傳遞給新的對象,而不是始終傳遞相同的引用。

+0

謝謝,就是這樣,我現在排序! – Paul