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')) ...