久しぶりに本当にメモ。最近あまりによく使うので。
inverse.js
/**
* オブジェクトの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);
}, {});
}
使い方はこんな感じ。
inverse_usage.js
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 (数値にあまり意味は無い)
ちょっと使い方の説明が微妙な感じだけどこれでっ