gpt4 book ai didi

javascript - 递归循环遍历节点树并检查节点是否存在,如果不存在,则使用回调或promise创建它

转载 作者:行者123 更新时间:2023-12-02 21:54:32 25 4
gpt4 key购买 nike

我想编写一个函数,递归地浏览节点树,并根据某个节点是否存在,记录其值或创建丢失的节点。这应该相当简单,但我似乎无法理解它。

我的代码目前如下所示:

let folderName = 'My Folder Name';

function init() {
let hasFolder = false;
let folderId = '';

chrome.bookmarks.getTree(function(itemTree){
itemTree.forEach(function(item){
processNode(item);
});
});

function processNode(node) {
// recursively process child nodes
if (node.children) {
node.children.forEach(function(child) {
processNode(child);
});
}

if (node.title == folderName) {
console.log(folderName + ' folder already exists: ID is ' + node.id);
hasFolder = true;
folderId = node.id;
}
}
}

如果文件夹已存在,它可以正常输出节点 ID,但现在我希望它在不存在时创建该文件夹。我想我需要使用 promise 或回调。创建文件夹的代码很简单:

function createFolder() {
chrome.bookmarks.create({
title: appName,
url: null
}, onBookmarkAdded)
}

我如何以及在哪里将其集成到我当前的功能中?(init() 在首次安装应用程序时调用。)

最佳答案

看来您应该能够在回调中检查 hasFolder 的值,并在必要时添加文件夹。像这样的事情:

chrome.bookmarks.getTree(function(itemTree){

itemTree.forEach(function(item){
processNode(item);
if(hasFolder) return;
});

if(!hasFolder){
createFolder();
}
});

我不熟悉 Chrome 的书签 api,所以我不能说它是否会提示你在 getTree 回调中修改书签集合,但如果没有,这种方法应该可行.

另外,为了提高效率,一旦找到文件夹,你可能希望从forEach中返回,以减少不必要的循环(已经添加在上面的代码)。

function processNode(node) {
// recursively process child nodes
if (node.children) {
node.children.forEach(function(child) {
processNode(child);
if(hasFolder) return;
});
}

if (node.title == folderName) {
console.log(folderName + ' folder already exists: ID is ' + node.id);
hasFolder = true;
folderId = node.id;
}

}

关于javascript - 递归循环遍历节点树并检查节点是否存在,如果不存在,则使用回调或promise创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com