我怎样才能更好地写这个?

时间:2021-07-22 08:08:42

标签: javascript if-statement

这段代码在我的代码中重复了很多次,但 xyz 当然发生了变化。有没有更好的办法?

if (x == "hour") {
  y = z * 60;
} else if (x == "day") {
  y = z * 1440;
} else if (x == "week") {
  y = z * 10080;
}

更新……涉及到 store.getters。它们不是普通的变量。

    if (this.tempUsersTriggerIntervelIdentifier === "minute") {
        this.convertedNewUsersTriggerIntervel =
          this.$store.getters.getUsersTriggerTime;
      } else if (this.tempDefaultRunIntervelIdentifier == "hour") {
        this.convertedNewDefaultRunIntervel =
          this.$store.getters.getOrganizationsDefaultTriggerTime * 60;
      } else if (this.tempDefaultRunIntervelIdentifier == "day") {
        this.convertedNewDefaultRunIntervel =
          this.$store.getters.getOrganizationsDefaultTriggerTime * 1440;
      } else if (this.tempDefaultRunIntervelIdentifier == "week") {
        this.convertedNewDefaultRunIntervel =
          this.$store.getters.getOrganizationsDefaultTriggerTime * 10080;
      }

我想做最好的做法。

2 个答案:

答案 0 :(得分:5)

const factors = {
 'hour' : 60,
 'day'  : 1440,
 'week' : 10080
};
let y = z * factors[x];

试试这个“地图对象”风格。你可以替换

<块引用>

因素[x]

<块引用>

因素.x

但是如果您切换到 ts,它对 TypeScript 不友好。

[对更新问题的回答]

你的代码不酷!您检查来自不同对象引用的案例,这些案例不干净且难以掌握。可以干净很多。不管怎样,你可以试试这个:

if (this.tempUsersTriggerIntervelIdentifier === "minute") {
    this.convertedNewUsersTriggerIntervel = this.$store.getters.getUsersTriggerTime;
} else {
    this.convertedNewDefaultRunIntervel = 
        this.$store.getters.getOrganizationsDefaultTriggerTime *
        factors[this.tempDefaultRunIntervelIdentifier];
} 

答案 1 :(得分:2)

我认为 switch 是处理多种情况最合适的方式。

function getMinutes (x, z) {
    switch (x) {
        case 'hour': z *= 60; break;
        case 'day': z *= 1440; break;
        case 'week': z *= 10080; break;
        default: z *= 60; break;
    }
    return z;
}

// somewhere in your code
const y = getMinutes('day', 1);