我在一個我試圖清理和精簡的遺留專案中遇到了這段代碼。
我有多個 if 條件,其中結構基本相同:
async function _validateRenderRequestById({
id: requestId,
user = null,
uploadToCampaign = false,
requestGroups = null,
}) {
const request = await getRequestTasksById(requestId);
if (!request) return null;
let validated = false;
const payload = { request, user, uploadToCampaign };
if (request.type === requestTypes.r && request.RequestTasks.length) {
validated = await _validateRequest({ ...payload, renderGroups });
}
if (request.type === requestTypes.a && request.ARequestTasks.length) {
validated = await _validateARequest({ ...payload, renderGroups });
}
if (request.type === requestTypes.e && request.ERequestTasks.length) {
validated = await _validateERequest(payload);
}
if (request.type === requestTypes.s && request.SRequestTasks.length) {
validated = await _validateSRequest(payload);
}
...
}
uj5u.com熱心網友回復:
我不完全確定這是否值得改變,但如果你想讓它成為表驅動的,你可以通過定義一個表來做到這一點,你可以查找 requestType 然后獲取你的陣列的屬性名稱重新檢查.lengthon 和匹配的驗證功能參考:
const requestMap = {
[requestTypes.r]: {name: "RequestTasks", fn: _validateRequest},
[requestTypes.a]: {name: "ARequestTasks", fn: _validateARequest},
[requestTypes.e]: {name: "ERequestTasks", fn: _validateERequest},
[requestTypes.s]: {name: "SRequestTasks", fn: _validateSRequest},
};
async function _validateRenderRequestById({
id: requestId,
user = null,
uploadToCampaign = false,
requestGroups = null,
}) {
const request = await getRequestTasksById(requestId);
if (!request) return null;
let validated = false;
const payload = {
request,
user,
uploadToCampaign
};
let requestInfo = requestMap[request.type];
if (requestInfo && request[requestInfo.name].length) {
validated = await requestInfo.fn({
...payload,
renderGroups
});
}
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460408.html
上一篇:用單行突出顯示4列中的重復行
下一篇:使用遞回連接兩個字串
