1

ブックマークのツリー(フォルダとサブフォルダに分類されている)をループし、それらの「パス」を使用して各フォルダのタグのリストを作成しようとしています。たとえば、「Dev」>「JS」に保存されているブックマークです。ブログのタグは次のようにマッピングされます['Dev, 'JS, 'Blogs']

を使用した構造のChromeのデフォルトの構造chrome.bookmarks.getTreeは、次のようになります。

[{
    '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', ...]

それは通過してすべての情報を引き出しますが、スタックをステップアップすると、その「レベル」の引数が保存されていないようです。おそらく再帰/クロージャに関係しているのではないかと思います。 、しかし私は迷子になっています!

申し訳ありませんが、これが意味をなさない場合は、頭をそのままにするのに苦労しています。お知らせください。必要に応じて、さらに説明を試みることができます。

4

1 に答える 1

2

配列を1つだけ作成し、それをすべての再帰サブ関数に渡しているようです。コードの記述はお任せしますが、常に同じオブジェクトではなく、新しいオブジェクトへの参照を渡すように、階層の各ポイントで配列のクローンを作成する必要があるようです。

于 2012-09-27T14:49:50.550 に答える