function getKeys(obj) { var keys = Object.keys(obj); keys.forEach(function(val) { if (obj[val] instanceof Object) { keys = keys.concat(getKeys(obj[val])); } }); return keys; } function getUniqueKeys(obj) { var keys = getKeys(obj); keys = keys.filter(function (e, i, keys) { return keys.lastIndexOf(e) === i; }); return keys; } alert(getUniqueKeys({ key1: 'one', key2: { key1: { another: 42 } } })); //produces "key2,key1,another"