Skip to content

Instantly share code, notes, and snippets.

@BinaryMuse
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BinaryMuse/936048cf5d470b5e7b22 to your computer and use it in GitHub Desktop.
Save BinaryMuse/936048cf5d470b5e7b22 to your computer and use it in GitHub Desktop.
keyMirror with namespaces
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;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment