Convert Map to JSON object in Javascript

前端 未结 5 939
青春惊慌失措
青春惊慌失措 2020-12-14 08:22

So Ive got the following javascript which contains a key/value pair to map a nested path to a directory.

function createPaths(aliases, propName, path) {
             


        
5条回答
  •  不思量自难忘°
    2020-12-14 09:02

    Another approach. I'd be curious which has better performance but jsPerf is down :(.

    var obj = {};
    
    function createPaths(map, path, value)
    {
    	if(typeof path === "string") path = path.split(".");
    	
    	if(path.length == 1)
    	{
    		map[path[0]] = value;
    		return;
    	}
    	else
    	{
    		if(!(path[0] in map)) map[path[0]] = {};
    		return createPaths(map[path[0]], path.slice(1), value);
    	}
    }
    
    createPaths(obj, 'paths.aliases.server.entry', 'src/test');
    createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
    
    console.log(obj);

    Without recursion:

    var obj = {};
    
    function createPaths(map, path, value)
    {
        var map = map;
        var path = path.split(".");
        for(var i = 0, numPath = path.length - 1; i < numPath; ++i)
        {
            if(!(path[i] in map)) map[path[i]] = {};
            map = map[path[i]];
        }
        map[path[i]] = value;
    }
    
    createPaths(obj, 'paths.aliases.server.entry', 'src/test');
    createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
    createPaths(obj, 'paths.aliases.dist.dingo', 'dist/test');
    createPaths(obj, 'paths.bingo.dist.entry', 'dist/test');
    
    console.log(obj);

    var obj = {};
    
    function createPaths(map, path, value)
    {
        var map = map;
        var path = path.split(".");
        
        while(path.length > 1)
        {
            map = map[path[0]] = map[path.shift()] || {};
        }
        
        map[path.shift()] = value;
      
    }
    
    createPaths(obj, 'paths.aliases.server.entry', 'src/test');
    createPaths(obj, 'paths.aliases.dist.entry', 'dist/test');
    createPaths(obj, 'paths.aliases.dist.dingo', 'dist/test');
    createPaths(obj, 'paths.bingo.dist.entry', 'dist/test');
    
    console.log(obj);

提交回复
热议问题