Given the path "documents/settings/user"
How can this be made into a nested object
Result
{
documents : {
settings : {
user : {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
I can't think of how to reference each previous path
var dir = {};
var paths = "documents/settings/user".split('/')
for (var i = 0; i < paths.length; i++) {
var path = paths[i];
if(i === 0)
dir[path] = {};
//else
//dir[path[i-?]] = {};
}
Run Code Online (Sandbox Code Playgroud)
小智 5
This is actually done quite easily with .reduce().
var dir = {}
var paths = "documents/settings/user".split('/')
paths.reduce(function(dir, path) {
return dir[path] = {}
}, dir)
console.log(dir)Run Code Online (Sandbox Code Playgroud)
因为第一个参数总是返回的最后一个值(或提供的第一个值),我们需要做的就是返回分配给当前路径的对象。并且因为赋值导致被赋值,我们可以使用它作为return语句本身的表达式。
如果需要,您可以防止由于相邻的分隔符而导致空路径名。
var dir = {}
var paths = "documents///settings/user".split('/')
paths.reduce(function(dir, path) {
return path ? (dir[path] = {}) : dir
}, dir)
console.log(dir)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |