Skip to content

Instantly share code, notes, and snippets.

@subtleGradient
Created October 16, 2008 01:24
Show Gist options
  • Select an option

  • Save subtleGradient/17043 to your computer and use it in GitHub Desktop.

Select an option

Save subtleGradient/17043 to your computer and use it in GitHub Desktop.
$mergeAdd({ fred:1 }, { fred:1 }) -> { fred:1 }
function $mergeAdd(){
var mix = {};
var obs = Array.flatten(arguments);
for (var i = 0, l = obs.length; i < l; i++){
var object = obs[i];
if ($type(object) != 'object') continue;
for (var key in object){
var object_prop = object[key], mp = mix[key];
if(!object_prop && $type(object_prop)!='number') continue;
if(mp && $type(object_prop) == 'object' && $type(mp) == 'object')
mix[key] = $mergeAdd(mp, object_prop);
else if(mp && $type(object_prop) == 'number' && $type(mp) == 'number')
mix[key] = mp + $unlink(object_prop);
else if(mp && String(mp).replace(/[^\-\d\.]/g,'').toFloat() && object_prop.replace(/[^\-\d\.]/g,'').toFloat() )
mix[key] = String(mp).replace(/[^\-\d\.]/g,'').toFloat() + object_prop.replace(/[^\-\d\.]/g,'').toFloat();
else
mix[key] = $unlink(object_prop);
}
}
return mix;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment