Lin*_*say 6 javascript json javascript-objects
我发现了如何将文件路径转换为树视图的问题?,但我不确定如何在JavaScript中获得所需的结果:
我正在尝试将一组路径转换为JSON树:
https://jsfiddle.net/tfkdagzv/16/
但我的道路被覆盖了.
我想尝试这样的事情:
[
'/org/openbmc/path1',
'/org/openbmc/path2',
...
]
Run Code Online (Sandbox Code Playgroud)
......把它变成......
output = {
org: {
openbmc: {
path1: {},
path2: {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我确信这很容易,但我错过了一些东西.
这是我写的解决方案:
const data = [
"/org/openbmc/examples/path0/PythonObj",
"/org/openbmc/UserManager/Group",
"/org/openbmc/HostIpmi/1",
"/org/openbmc/HostServices",
"/org/openbmc/UserManager/Users",
"/org/openbmc/records/events",
"/org/openbmc/examples/path1/SDBusObj",
"/org/openbmc/UserManager/User",
"/org/openbmc/examples/path0/SDBusObj",
"/org/openbmc/examples/path1/PythonObj",
"/org/openbmc/UserManager/Groups",
"/org/openbmc/NetworkManager/Interface"
];
const output = {};
let current;
for (const path of data) {
current = output;
for (const segment of path.split('/')) {
if (segment !== '') {
if (!(segment in current)) {
current[segment] = {};
}
current = current[segment];
}
}
}
console.log(output);
Run Code Online (Sandbox Code Playgroud)
它将完成您需要的一切,并且紧凑.但是,对于解决方案中的问题,它与您的管理方式有关current.具体来说,你有这个:
current = output;
Run Code Online (Sandbox Code Playgroud)
而不是这个:
current = output[path[0]];
Run Code Online (Sandbox Code Playgroud)
这意味着初始化的代码current每次都会运行,因为current在您的数据中,它总是会存在current,而且current还不存在,所以current总会被重置/覆盖.
| 归档时间: |
|
| 查看次数: |
2239 次 |
| 最近记录: |