Skip to content

Instantly share code, notes, and snippets.

@alucky0707
Created July 31, 2013 07:42
Show Gist options
  • Save alucky0707/6120094 to your computer and use it in GitHub Desktop.
Save alucky0707/6120094 to your computer and use it in GitHub Desktop.
Objectのkeyとvalueを反転させる。もしくはJSでenumを作る。 ref: http://qiita.com/alucky0707/items/de59e49de855e56be733
/**
* オブジェクトのkeyとvalueを反転させる
* @param {Object} obj 反転させるオブジェクト
* @param {Boolean} [keyIsNumber=false] keyが数値であるか?(数値ならkeyを反転させるとき数値に変換する)
* @return {Object} keyとvalueの反転したオブジェクト
*/
function inverseObject (obj, keyIsNumber) {
return Object.keys(obj).reduceRight(function (ret, k) {
return (ret[obj[k]] = keyIsNumber ? parseInt(k, 10) : k, ret);
}, {});
}
var
obj = {
foo: 'bar',
bar: 'foo',
},
inv = inverseObject(obj); //=> {bar: 'foo', foo: 'bar'}
// あんましこういう使い方しない…
console.log(obj[inv[obj[inv.foo]]])
var
// こんな風にしてenum的なものを作る
enumKeys = 'aaa bbb ccc'.split(' '),
enumLike = inverseObject(enumKeys);
console.log(enumLike.aaa); //=> 0 (数値にあまり意味は無い)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment