Given a JS string: var s = "deep.deeper.deepest", how can I convert this into object like this: deep: {deeper: {deepest: {}}}
            Asked
            
        
        
            Active
            
        
            Viewed 60 times
        
    0
            
            
         
    
    
        dovstone
        
- 124
- 11
2 Answers
2
             const dottedToObj = (str, orig = {}) => (str.split(".").reduce((obj, key) => obj[key] = {}, orig), orig);
Just reduce the array of strings (splitted the original string) into a chain of objects. Or a bit less functional:
 function dottedToObj(str){
  const root = {};
  var acc = root;
  for(const key of str.split(".")){
    acc = acc[key] = {};
  }
  return root;
}
 
    
    
        Jonas Wilms
        
- 132,000
- 20
- 149
- 151
- 
                    [Try it](http://jsbin.com/wizekubabi/edit?console) – Jonas Wilms Jan 04 '18 at 17:52
1
            
            
        A simple loop should work for this, just move through each dotted property while moving down one level in the object:
const s = "deep.deeper.deepest";
function convertToObject(str) {
  const result = {};
  
  let inner = result;
  for (const key of s.split(".")) {
    // Give the object a child with this key
    inner[key] = {};
  
    // Set the current object to that child.
    inner = inner[key]
  }
  
  // Return the original
  return result;
}
console.log(convertToObject(s)) 
    
    
        CRice
        
- 29,968
- 4
- 57
- 70