1 回答

TA貢獻1757條經驗 獲得超8個贊
所以,看起來你的邏輯實際上是這樣的:
您有一組狀態對象。
如果任何狀態為“InProgress”或“Pending”,則返回“InProgress”
如果所有狀態都相同且為“失敗”、“取消”或“DidNotRun”,則返回該值。
如果任何狀態為“失敗”、“取消”或“DidNotRun”,則返回“部分完成”
否則,返回“完成”
因此,如果您能弄清楚如何通過一次遍歷數組而不是 5 次部分遍歷數組來完成所有這些檢查,將會獲得巨大的執行效率。
這是一種方法:
const doneStatuses = new Set(["Failed", "Canceled", "DidNotRun", "Completed", "InProgress"]);
function getComputedStatus(list) {
const allStatuses = new Set();
// collect all status values in a Set object
for (let status of list) {
allStatuses.add(status.statusName);
}
// if all the statusName values were the same and they were
// "Failed", "Canceled", "DidNotRun", "InProgess" or "Completed"
// then return that specific status
if (allStatuses.size === 1) {
let theStatus = Array.from(allStatuses)[0];
if (doneStatuses.has(theStatus)) {
return theStatus;
}
}
// if any status was "InProgress" or "Pending", return "InProgress"
if (allStatuses.has("InProgress") || allStatuses.has("Pending")) {
return "InProgress";
}
// If any status was "Failed", "Canceled" or "DidNotRun" (but not all)
// then return "PartiallyCompleted"
if (allStatuses.has("Failed") || allStatuses.has("Canceled") || allStatuses.has("DidNotRun")) {
return "PartiallyCompleted";
}
// otherwise, return "Completed"
return "Completed";
}
添加回答
舉報