亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有效地檢查對象數組循環中的許多條件

有效地檢查對象數組循環中的許多條件

qq_笑_17 2023-05-19 15:13:54
我有一個對象數組,一個屬性是它們的狀態,我需要計算以下狀態:如果所有狀態都失敗,則返回“失敗”,如果所有狀態都被取消,則返回“已取消”,依此類推,但如果數組有一個失敗,或者一個取消返回“部分完成”,我做到了,但我循環了很多,我覺得存在一種更好更有效的方法來做同樣的事情,這是我的代碼:function getComputedStatus(list) {      if (list.every(status => status.statusName == 'Failed'))          return 'Failed';      if (list.every(status => status.statusName == 'Canceled'))          return 'Canceled';      if (list.every(status => status.statusName == 'DidNotRun'))          return 'DidNotRun';      if (list.some(status => status.statusName == 'InProgress' ||          status.statusName == 'Pending'))          return 'InProgress';      if (list.some(status => status.statusName === 'Failed'   ||                              status.statusName === 'Canceled' ||                              status.statusName === 'DidNotRun'))         return 'PartiallyCompleted';      return 'Completed';}
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

所以,看起來你的邏輯實際上是這樣的:

  1. 您有一組狀態對象。

  2. 如果任何狀態為“InProgress”或“Pending”,則返回“InProgress”

  3. 如果所有狀態都相同且為“失敗”、“取消”或“DidNotRun”,則返回該值。

  4. 如果任何狀態為“失敗”、“取消”或“DidNotRun”,則返回“部分完成”

  5. 否則,返回“完成”

因此,如果您能弄清楚如何通過一次遍歷數組而不是 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";

}


查看完整回答
反對 回復 2023-05-19
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號