ビット演算を使うと集合の判定が簡単にできる。 ただしjavascriptにおいて型サイズがint32に変換されているためそれを超える場合には使えない(0-31まで)。
const JOB = Object.freeze({
NONE : 0,
FIGHTER : 1,
MAGE : 2,
PRIEST : 3,
MONK : 4,
KNIGHT : 5,
SUMMONER : 6,
});
const JOB_FLAGS = Object.freeze(Object.keys(JOB)
.map((key)=>[key, 1 << JOB[key]])
.reduce((r, tuple)=>{ r[tuple[0]] = tuple[1]; return r; }, {})
);
const JOB_GROUP = Object.freeze({
TANK : JOB_FLAGS.FIGHTER | JOB_FLAGS.MONK | JOB_FLAGS.KNIGHT,
CASTER : JOB_FLAGS.MAGE | JOB_FLAGS.PRIEST | JOB_FLAGS.SUMMONER,
HEALER : JOB_FLAGS.PRIEST,
EXJOB : JOB_FLAGS.KNIGHT | JOB_FLAGS.SUMMONER,
})
let job_id = JOB.FIGHTER;
if( 1<<job_id & JOB_GROUP.TANK){
console.log("tank job")
}else{
console.log("not tank job")
}