GOPHERSPACE.DE - P H O X Y
gophering on dusted.dk
                              _     _             
                        _ __ | |__ | | ___   __ _ 
                       | '_ \| '_ \| |/ _ \ / _` |
                       | |_) | | | | | (_) | (_| |
                       | .__/|_| |_|_|\___/ \__, |
                       |_|    ...2019-09-12 |___/ 

Something useful
In javascript I found that sometimes it's nice to be able to describe an
object structure in a disconnected way, as a list of paths and values, among
other information, of. Basically this happens when one want in one place to
treat data in a flat manner, but would like a structured representation of that
data in another place.
What I came up with is probably not a unique solution, but I think it has some
elegance to it.

 Let's say we have a flat list describing our structure in js:
 // We have this
 const theData = [
   { path: 'a.b.c',  val: 1 },
   { path: 't',      val: 2 },
   { path: 'a.b.d.e', val: 3 },
   { path: 'b.c.d',  val: 4 },
 ];
 console.log(JSON.stringify(theData,null,2));
 // We want this:
 const niceObject = {
   a: {
     b: {
       c: 1,
       d: {
         e: 3
       }
     }
   },
   t: 2,
   b: {
     c: {
       d: 4
     }
   }
 };
 console.log(JSON.stringify(niceObject,null,2));
 // We can do it with this:
 function unpack(keys, value, obj) {                                             
   const key = keys.shift();                                               
   if(keys.length===0) {                                                   
     obj[key]=value;                                                 
     return obj;                                                     
   } else {                                                                
     if(obj[key]===undefined) {                                      
       obj[key]={};                                            
     }                                                               
     return unpack(keys, value, obj[key]);                           
   }                                                                       
 }                                                                               
 // And then just:
 const generatedNiceObject = theData.reduce( (obj, item)=>{
   unpack( item.path.split('.'), item.val, obj );
   return obj;
 }, {});
 console.log(JSON.stringify(generatedNiceObject,null,2));

So that's that.
The output looks like this:
[
  {
    "path": "a.b.c",
    "val": 1
  },
  {
    "path": "t",
    "val": 2
  },
  {
    "path": "a.b.d.e",
    "val": 3
  },
  {
    "path": "b.c.d",
    "val": 4
  }
]
{
  "a": {
    "b": {
      "c": 1,
      "d": {
        "e": 3
      }
    }
  },
  "t": 2,
  "b": {
    "c": {
      "d": 4
    }
  }
}
{
  "a": {
    "b": {
      "c": 1,
      "d": {
        "e": 3
      }
    }
  },
  "t": 2,
  "b": {
    "c": {
      "d": 4
    }
  }
}