JavaScript

Objectのkeyとvalueを反転させる。もしくはJSでenum的なものを作る。

More than 5 years have passed since last update.

久しぶりに本当にメモ。最近あまりによく使うので。


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 (数値にあまり意味は無い)


ちょっと使い方の説明が微妙な感じだけどこれでっ