![](/img/trans.png)
[英]Is there a way to set a condition, making one parameter different depending on another parameter? Javascript
[英]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.