Extract objects out of an array
This needed to be tested so it could be used in production code.
by Matt Rummler
JavaScript
Object.forEach=(function forEach()
{
return function(obj,fn)
{
if(obj.length)
{
for (var i = 0, ol = obj.length, v = obj[0]; i < ol && fn(v, i) !== false; v = obj[++i]);
}
else
{
for (var p in obj) if (fn(obj[p], p) === false) break;
}
};
})(this);
Object.toType = (function toType(global)
{
return function(obj)
{
if (obj === global)
{
return "global";
}
return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
};
})(this);
function extractObjectsArray(data,TargetObject)
{
TargetObject=TargetObject || {};
if(Object.toType(data)==='array')
{
// alert('data was found to be an array');
Object.forEach(data, function(value, key)
{
if(Object.toType(value)=='object')//this is only done because we know the type of data = array already... so then if that array contains an object... probably should check for a count of objects before doing this...
{
if(data.length>1)
{
// alert('data was found to posses more elements than one');
TargetObject[key]=value;//,TargetObject);
}
else
{
// alert('data was found to posses only one element');
data=extractObjectsArray(value);
}
}
else if(Object.toType(value)==='array')
{
// alert('data contains another array so recursing');
data=extractObjectsArray(data);
}
});
if(Object.getOwnPropertyNames(TargetObject).length>1)
{
return TargetObject;
}
else
{
return data;
}
}
else if(Object.toType(data)=='object')
{
// alert('data was found to be an object');
Object.forEach(data, function(value2,key2)
{
if(Object.toType(value2)==='array')
{
data[key2]=extractObjectsArray(value2);
}
});
return data;
}
}
function printOutObject(Obj)
{
Object.forEach(Obj, function(value, key)
{
alert('Obj has a key...