This is straight forward implementation of the DFS (Depth First Search) traversal algorithm using recursion.
var obj = {
baz: {
foo: {
bar: "5"
},
hell: {
sin: "0"
}
},
a: {
b: "1"
}
};
var hash = {};
var str = '';
var dfs = function(obj, str) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'string')
hash[str + key] = obj[key];
else {
dfs(obj[key], str + key + '.');
}
}
}
};
dfs(obj, str);
console.log(hash);
var obj = {
baz: {
foo: {
bar: "5"
},
hell: {
sin: "0"
}
},
a: {
b: "1"
}
};
var tracker = [];
var hashMap = {};
var hashKey = '';
function dfs(obj, tracker) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] == "string") {
tracker.push(key);
hashKey = appendArray(tracker);
hashMap[hashKey] = obj[key];
tracker.pop();
} else {
tracker.push(key);
dfs(obj[key], tracker);
tracker.pop();
}
}
}
}
dfs(obj, tracker);
console.log(hashMap);
function appendArray(arr) {
var ret = '';
for (var i = 0; i < arr.length; i++) {
ret = ret + '.' + arr[i];
}
return ret.substring(1, ret.length);
}
const test = {
baz: {
foo: {
bar: "5"
},
hell: {
sin: "0"
}
},
a: {
b: "1"
}
};
const flatten = (obj, str = '', temp = {}) => {
for (const [key, val] of Object.entries(obj)) {
if (typeof val === 'object') {
flatten(val, `${str}${key}.`, temp);
} else {
temp[`${str}${key}`] = val;
}
}
};
const output = {};
flatten(test, '', output);
console.log(output);Output
Object {baz.foo.bar: "5", baz.another.bar: "0", a.b: "1"}