Javascript 处理40MB+;JS中的对象
我有一个不寻常的情况,涉及179586个chrome书签。大多数都是重复的,我需要删除它们 显然,这个过程需要通过脚本实现自动化 Chrome的bookmarks API对允许的操作速率强制执行了严格的配额,因此我必须首先将数据导出为更有利于脱机操作的格式Javascript 处理40MB+;JS中的对象,javascript,node.js,google-chrome,callstack,Javascript,Node.js,Google Chrome,Callstack,我有一个不寻常的情况,涉及179586个chrome书签。大多数都是重复的,我需要删除它们 显然,这个过程需要通过脚本实现自动化 Chrome的bookmarks API对允许的操作速率强制执行了严格的配额,因此我必须首先将数据导出为更有利于脱机操作的格式 chrome.bookmarks.getTree(function(t){tree = t[0]}); 在中的全局变量树下存储整个存储库 显示对象(至少使用JSON编码)的长度为42777359字节 JSON.stringify(tree)
chrome.bookmarks.getTree(function(t){tree = t[0]});
在中的全局变量树下存储整个存储库
显示对象(至少使用JSON编码)的长度为42777359
字节
JSON.stringify(tree).match(/"url"/g).length
显示总共有179586个书签
所以,为了让整个事情变得简单:
var ALL = [], stack = [];
function processTree(tree) {
if(!(!tree.url != !tree.children)) throw tree;
var entry = (tree.url ? [tree.url, tree.title] : ["FOLDER", tree.title]).concat(stack);
entry.dateAdded = tree.dateAdded;
ALL.push(entry);
if(tree.children) {
stack.unshift(tree.title);
tree.children.forEach(processTree);
stack.shift();
}
return 'done.';
}
不幸的是,我不仅没有从中得到预期的结果,而且还得到:uncaughtrangeerror:超过了最大调用堆栈大小
。当我检查ALL
和stack
时,它们看起来都是长度为17388的数组<代码>堆栈
只由空字符串组成,而ALL
只由空字符串组成的数组组成
有谁知道如何解决这个问题吗?也许Node.js比Chrome开发控制台更适合处理阶段的环境,我现在应该把重点放在如何处理JSON上
也许Node有一个更灵活、更可配置的callstack限制和其他类似参数
谢谢你的想法!:) 我将研究蹦床,但是我如何在不知道文件夹的最大深度的情况下使其成为非递归的呢?这不是无限递归的吗?你总是经过同一棵树。啊,我也是!让我试着把它修好。@bfavareto是的,就是这样!非常感谢:)
var ALL = [], stack = [];
function processTree(tree) {
if(!(!tree.url != !tree.children)) throw tree;
var entry = (tree.url ? [tree.url, tree.title] : ["FOLDER", tree.title]).concat(stack);
entry.dateAdded = tree.dateAdded;
ALL.push(entry);
if(tree.children) {
stack.unshift(tree.title);
tree.children.forEach(processTree);
stack.shift();
}
return 'done.';
}