如何简化多个嵌套if else语句的代码

Zhe*_*hen 2 javascript if-statement coffeescript

我目前正在使用以下代码进行比较,但正如您所看到的,我正在制作吨if if语句.有没有办法简化代码并使其更有效?

getGenderRef: (grammer=nil) ->
  @gender_ref = ""
  gender = this.get('gender')
  if gender? and gender == 'male'
    if grammer == 'he'
      @gender_ref = 'he'
    else if grammer == 'his'
      @gender_ref == 'his'
    else if grammer == 'him'
      @gender_ref == 'him'
  else if gender? and gender == 'female'
    if grammer == 'he'
      @gender_ref = 'she'
    else if grammer == 'his'
      @gender_ref == 'her'
    else if grammer == 'him'
      @gender_ref == 'her'
  else if gender? or gender == null
    if grammer == 'he'
      @gender_ref = 'he/she'
    else if grammer == 'his'
      @gender_ref == 'his/her'
    else if grammer == 'him'
      @gender_ref == 'him/her'
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

你可以使用地图

var rules = {
    'female': {
        'he': 'she',
        'his': 'her',
        // ...
    },
    'male': {
        'he': 'he',
        // ...
    },
    'default': {
        'he': 'he/she'
        // ...
    }
};

this.gender_ref = rules[gender ? gender : 'default'][grammer];
Run Code Online (Sandbox Code Playgroud)

它是可扩展的,也可以从另一个后端(例如DB)动态生成.

编辑(由Linus G Thiel撰写)与coffeescript相同:

rules =
  female:
    he: 'she'
    his: 'her'
    // ...
  male:
    he: 'he'
    // ...
  default:
    he: 'he/she'
    // ...

@gender_ref = rules[gender or 'default'][grammer]
Run Code Online (Sandbox Code Playgroud)