首页 > 解决方案 > 不同的条件取决于参数

问题描述

如何针对这两种情况(fixAllJobs、logAllJobs)优化 processAllJobs 函数。

processAllJobs = (channel) => {
    const jobsCopy = [...this.getState().jobs];
    let validJobs = [];
    jobsCopy.forEach((job) => {
        if (channel === 'fixJobs') {
            if (job.processStatus !== ERROR && job.processStatus !== FIXED) {
                job.processStatus = IN_PROCESS;
                job.progress = 0;
                validJobs.push(job);
            }
        }  else {
            if (job.processStatus !== ERROR) {
                job.processStatus = IN_PROCESS;
                job.progress = 0;
                validJobs.push(job);
            }
        }
    });
    this.setState({isRunning: true, jobs: jobsCopy});
    ipcRenderer.send(channel, validJobs);
};

fixAllJobs = () => {
    this.processAllJobs('fixJobs');
};

logAllJobs = () => {
    this.processAllJobs('logJobs');
};

我只是想出了这个,但这完全是胡说八道。在 if 条件下编写三元运算符是一种好方法吗?

if (channel === 'fixJobs' ? job.processStatus !== ERROR
&& job.processStatus !== FIXED : job.processStatus !== ERROR) {
      job.processStatus = IN_PROCESS;
      job.progress = 0;
      validJobs.push(job);
}

标签: javascript

解决方案


You want the condition job.processStatus !== FIXED to be checked only if channel is fixJobs, you can write the condition as below to achieve that

job.processStatus !== ERROR && (channel !== 'fixJobs' || job.processStatus !== FIXED)


推荐阅读