Skip to content

Instantly share code, notes, and snippets.

@slidenerd
Created August 19, 2016 13:32
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save slidenerd/04b78a5732f063a6ce6d73ef66a3fb3a to your computer and use it in GitHub Desktop.
Save slidenerd/04b78a5732f063a6ce6d73ef66a3fb3a to your computer and use it in GitHub Desktop.
Inspired from gdibble
function flattenObject(ob) {
let toReturn = {};
let flatObject;
for (let i in ob) {
console.log(i+ ' ' + typeof(ob[i]));
if (!ob.hasOwnProperty(i)) {
continue;
}
//Exclude arrays from the final result
//Check this http://stackoverflow.com/questions/4775722/check-if-object-is-array
if(ob[i] && Array === ob[i].constructor){
continue;
}
if ((typeof ob[i]) === 'object') {
flatObject = flattenObject(ob[i]);
for (let x in flatObject) {
if (!flatObject.hasOwnProperty(x)) {
continue;
}
//Exclude arrays from the final result
if(flatObject[x] && Array === flatObject.constructor){
continue;
}
toReturn[i + (!!isNaN(x) ? '.' + x : '')] = flatObject[x];
}
} else {
toReturn[i] = ob[i];
}
}
return toReturn;
}
@abemedia
Copy link

Stripping out arrays means this is useless for any data containing them. Would be much better to instead flatten them too e.g.

{ a: ["b", "c"] } => { "a.0": "b", "a.1": "c" }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment