JSFiddle - React, Tailwind, and code Playground

by Chase Wilson

JavaScript

var DeepThroat = new Class({
    __data__: {
    
    },
    
    initialize: function (data) {
        Object.merge(this.__data__, DeepThroat.compress(data))
    },
    
    get: function (key, def) {
        var data = this.__data__[key]
        data = (typeof data !== undefined)? data : def
        
        if(data == undefined || (typeOf(data) =='object' && Object.keys(data).length == 0)) {
            for(var k in this.__data__) {
                if( key === k.substr( 0, key.length ) ) {
                    data = data || {}
                    var newK = k.split(key+'.')[1]
            
                    if( k.length == key.length && typeOf(this.__data__[k]) == 'object') {                         
                        if(Object.keys(this.__data__[k]).length !== 0) continue
                        data = this.__data__[k]
                    }
                    data[newK] = this.__data__[k]
                }
            }
        }
        return data
    },
    
    set: function (key,value) {
        this.__data__[key] = value
    }
    
})
    
Object.merge(DeepThroat, {
    compress: function (obj, flat, baseKey) {
        flat = flat || {}
        for(var key in obj) {
            flatKey = (baseKey)? baseKey + '.'+key:key
            if (typeOf(obj[key]) === 'object') {
              return DeepThroat.compress(obj[key],flat,flatKey)
            }
            
            flat[flatKey] = obj[key]
        }
        return flat
    },
    
    decompress: function (obj) {
    
    }
})

var deepObj = new DeepThroat({ 
    one: { 
         two: 2
        ,three: {
            four: 4
            ,five: function () {
            
            }
        }
    }
})
deepObj.set('one.three', {
    seven: 7
})
deepObj.set('one.three.six', {})

console.log('________________________')
console.log(deepObj.get('one.two')) 
console.log(deepObj.get('one.three'))            
console.log(deepObj.get('one.three.four'))             ...