var data = keyMirror({
ONE: null,
TWO: null,
OTHER: keyMirror({
STUFF: null
}, "OTHER")
});
yields
var data = {
ONE: "ONE",
TWO: "TWO",
OTHER: {
STUFF: "OTHER:STUFF"
}
};
/** | |
* Given an object of `key -> null` pairs, returns an object of | |
* `key -> key` pairs. Leaves `key -> other` pairs untouched. | |
* An optional second parameter prefixes the values, e.g. | |
* a second parameter of "NAMESPACE" returns | |
* `key -> "NAMESPACE:" + key` pairs | |
*/ | |
function keyMirror(obj, namespace) { | |
var ret = {}, | |
prefix = namespace ? namespace + ":" : "", | |
key; | |
for (key in obj) { | |
if (!obj.hasOwnProperty(key)) { | |
continue; | |
} | |
if (obj[key] === null) { | |
ret[key] = prefix + key; | |
} else { | |
ret[key] = obj[key]; | |
} | |
} | |
return ret; | |
}; |