Create an object based on file path string

Bar*_*s41 0 javascript

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)