簡體   English   中英

不同的條件取決於參數

[英]different condition depending on parameter

如何針對這兩種情況(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);
}

您希望條件job.processStatus !== FIXED僅在 channel 為fixJobs時才被檢查,您可以編寫如下條件來實現

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

如果將來由於某種原因您添加了新的代碼/狀態/等,則可以使用數組

let status = ["ERROR"]
if (channel === 'fixJobs') status.push("FIXED");

if (!status.some(s => s === job.processStatus)) {
    job.processStatus = IN_PROCESS;
    job.progress = 0;
    validJobs.push(job);
}

您可以編寫如下循環:

jobsCopy.forEach((job) => {
        if (job.processStatus !== ERROR) {
            if ((channel === 'fixJobs' && job.processStatus !== FIXED) || channel === 'logjobs' ) {
                job.processStatus = IN_PROCESS;
                job.progress = 0;
                validJobs.push(job);
            }
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM