LoginSignup
6
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-07-31

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

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

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

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5