Javascript多维数组到单个对象
我很难写出一个算法。上下文如下:我有一个路径数组,我想把它放在一个对象中,就像重建一个文件树一样 以下是一个简单的示例:Javascript多维数组到单个对象,javascript,arrays,object,tree,Javascript,Arrays,Object,Tree,我很难写出一个算法。上下文如下:我有一个路径数组,我想把它放在一个对象中,就像重建一个文件树一样 以下是一个简单的示例: var paths = [ '/var/log/log.txt', '/var/log/test.txt', '/home/toto/someFile.txt', '/wtf.txt' ]; 我希望这个路径数组是这样一个对象: var tree = { var: { log: ['log.txt', 'test.txt']
var paths = [
'/var/log/log.txt',
'/var/log/test.txt',
'/home/toto/someFile.txt',
'/wtf.txt'
];
我希望这个路径数组是这样一个对象:
var tree = {
var: {
log: ['log.txt', 'test.txt']
},
home: {
toto: ['someFile.txt']
},
wtf.txt: null // I don't know how to handle this case
};
有没有关于如何做这样一件事的提示
实际上,我有类似的东西,但它最终只有一个深度级别,而不是在根级别处理文件:
function rebuildTree(paths, tree) {
paths.forEach(function (path) {
var splittedPath;
if (path.indexOf("/") > -1) {
splittedPath = path.split('/');
} else {
splittedPath = [path];
}
splittedPath.some(function(item, index) {
if (!tree.hasOwnProperty(item) && index > 0) {
tree[item] = {};
}
if ((parseInt(index) + 1) <= (splittedPath.length - 1)) {
var nextIndex = parseInt(index + 1);
var nextPath = splittedPath.splice(0, index);
tree[item] = rebuildTree(nextPath, tree[item]);
}
});
});
}
我在下面写了一个小助手函数,它应该很容易实现,检查注释看看它是如何工作的,查看控制台的输出 函数树路径{ //这将储存我们的树 var-tree={}; //这将贯穿我们所有的道路 paths.forEachfunctionpath{ //这将删除初始斜杠 ifpath.indexOf'/'==0 path=path.substring1; //查找所有单个文件/文件夹 路径=路径。拆分“/”; //如果只有一个,我们将假定它是一个文件,并将您的'null'赋值` ifpath.length==1{ 树[路径[0]]=树[路径[0]]| |空; 回来 } //创建一个变量来存储我们所在的当前分支 var branch=tree[path[0]]=tree[path[0]]| |{}; //循环遍历其余的值,在执行时重新初始化分支。 forvar i=1;i