多个if简写一下

130 阅读2分钟
    if (query.indexWorkCode) {
    this.queryParams.workCode = query.indexWorkCode
    }
    else if (query.fxName) {
    // 风险总览跳转获取参数
    let str = this.\$route.query.fxName
    let index1 = str.indexOf('(')
    let index2 = str.indexOf(')')
    this.queryParams.workCode = str.substring(index1 + 1, index2)
    } else if (query.fxTableWorkCode) {
    this.queryParams.workCode = query.fxTableWorkCode
    }
    else if (query.unusualId) {
    this.queryParams.workCode = query.unusualId
    }
    else if (query.leaderCode) {
    this.queryParams.workCode = query.leaderCode
    }
    else if (query.logCode) {
    this.queryParams.workCode = query.logCode
    }
    else if (query.leaderEndTime) {
    this.queryParams.endTime = query.leaderEndTime
    }
    else if (query.leaderStartTime) {
    this.queryParams.startTime = query.leaderStartTime
    }
    else if (query.logStartTime) {
    this.queryParams.startTime = query.logStartTime
    }
    else if (query.logEndTime) {
    this.queryParams.endTime = query.logEndTime
    }
   
   
   const queryParamKeys = {

    indexWorkCode: "workCode",
    fxName: (str) => {
    let index1 = str.indexOf("(");
    let index2 = str.indexOf(")");
    return str.substring(index1 + 1, index2);
    },
    fxTableWorkCode: "workCode",
    unusualId: "workCode",
    leaderCode: "workCode",
    logCode: "workCode",
    leaderEndTime: "endTime",
    leaderStartTime: "startTime",
    logStartTime: "startTime",
    logEndTime: "endTime",
    };

    for (let queryKey in this.$route.query) {
      if (queryKey in queryParamKeys) {
        let queryParamsKey = queryParamKeys[queryKey];
        let queryParamsValue =
          typeof queryParamKeys[queryKey] === "function"
            ? queryParamKeys[queryKey](this.$route.query\[queryKey])
    : this.\$route.query\[queryKey];
    this.queryParams\[queryParamsKey] = queryParamsValue;
    }
    }
    可以将所有的查询参数和对应的键名存储到一个对象中,然后遍历这个对象,判断当前查询参数是否存在于这个对象中,如果存在,则将对应的值赋值给`this.queryParams`。对于需要截取的`fxName`参数,可以在对象中将其对应的值设为一个函数,该函数接受一个字符串参数,返回需要赋值给`workCode`的值。

改写后的代码如下:

const queryParamKeys = {
  indexWorkCode: "workCode",
  fxName: (str) => {
    let index1 = str.indexOf("(");
    let index2 = str.indexOf(")");
    return str.substring(index1 + 1, index2);
  },
  fxTableWorkCode: "workCode",
  unusualId: "workCode",
  leaderCode: "workCode",
  logCode: "workCode",
  leaderEndTime: "endTime",
  leaderStartTime: "startTime",
  logStartTime: "startTime",
  logEndTime: "endTime",
};

for (let queryKey in this.$route.query) {
  if (queryKey in queryParamKeys) {
    let queryParamsKey = queryParamKeys[queryKey];
    let queryParamsValue =
      typeof queryParamKeys[queryKey] === "function"
        ? queryParamKeys[queryKey](this.$route.query[queryKey])
        : this.$route.query[queryKey];
    this.queryParams[queryParamsKey] = queryParamsValue;
  }
}

这样,就可以将原来的多个if语句简化为一个循环语句,代码更加简洁易懂。需要注意的是,如果存在多个查询参数对应同一个键名(例如fxNamefxTableWorkCode都对应workCode),则后面的查询参数会覆盖前面的查询参数。如果需要保留所有查询参数,可以将this.queryParams[queryParamsKey]改为一个数组,将所有查询参数值存储到这个数组中。

const queryParamKeys = {
indexWorkCode: "workCode",
fxName: (str) => {
let index1 = str.indexOf("(");
let index2 = str.indexOf(")");
return str.substring(index1 + 1, index2);
},
fxTableWorkCode: "workCode",
unusualId: "workCode",
leaderCode: "workCode",
logCode: "workCode",
leaderEndTime: "endTime",
leaderStartTime: "startTime",
logStartTime: "startTime",
logEndTime: "endTime",
};

for (let queryKey in this.$route.query) {
  if (queryKey in queryParamKeys) {
    let queryParamsKey = queryParamKeys[queryKey];
    let queryParamsValue =
      typeof queryParamKeys[queryKey] === "function"
        ? queryParamKeys[queryKey](this.$route.query\[queryKey])
: this.\$route.query\[queryKey];
if (Array.isArray(this.queryParams\[queryParamsKey])) {
this.queryParams\[queryParamsKey].push(queryParamsValue);
} else if (this.queryParams\[queryParamsKey]) {
this.queryParams\[queryParamsKey] = \[this.queryParams\[queryParamsKey], queryParamsValue];
} else {
this.queryParams\[queryParamsKey] = queryParamsValue;
}
}
}

如果需要保留所有查询参数的值,可以将this.queryParams[queryParamsKey]改为一个数组,将所有查询参数值存储到这个数组中。这样,如果存在多个查询参数对应同一个键名,就可以将所有的查询参数值都保存下来,而不是只保留最后一个查询参数的值。

改写后的代码如下:

const queryParamKeys = {
  indexWorkCode: "workCode",
  fxName: (str) => {
    let index1 = str.indexOf("(");
    let index2 = str.indexOf(")");
    return str.substring(index1 + 1, index2);
  },
  fxTableWorkCode: "workCode",
  unusualId: "workCode",
  leaderCode: "workCode",
  logCode: "workCode",
  leaderEndTime: "endTime",
  leaderStartTime: "startTime",
  logStartTime: "startTime",
  logEndTime: "endTime",
};

for (let queryKey in this.$route.query) {
  if (queryKey in queryParamKeys) {
    let queryParamsKey = queryParamKeys[queryKey];
    let queryParamsValue =
      typeof queryParamKeys[queryKey] === "function"
        ? queryParamKeys[queryKey](this.$route.query[queryKey])
        : this.$route.query[queryKey];
    if (Array.isArray(this.queryParams[queryParamsKey])) {
      this.queryParams[queryParamsKey].push(queryParamsValue);
    } else if (this.queryParams[queryParamsKey]) {
      this.queryParams[queryParamsKey] = [this.queryParams[queryParamsKey], queryParamsValue];
    } else {
      this.queryParams[queryParamsKey] = queryParamsValue;
    }
  }
}

这样,如果存在多个查询参数对应同一个键名,就会将所有的查询参数值都保存到一个数组中。如果只有一个查询参数对应一个键名,仍然会将其保存到一个普通变量中。

我项目中不存在,是不同的页面跳转到该页面,