簡體   English   中英

在 javascript 中使用開關盒

[英]Using switch case in javascript

這是我現在擁有的變量

[
   {
      "_id":"63773059c3160f782c087e33",
      "nfrid":"637328ebf5c4b2558b064809",
      "nfrname":"azuread",
      "fileName":"package.json",
      "isImport":false,
      "isConst":false,
      "isComponent":false,
      "isNewFile":false,
      "landmark":"\"react\"",
      "isAfter":false,
      "fileContent":"\"@azure/msal-react\": \"^1.4.9\",",
      "filePath":"package.json",
      "isPackage":true,
      "isIndexHtml":false,
      "projecttypeid":"6372366d1b568e00d8af2e44",
      "projecttypetitle":"PWA React",
      "nfrGitIo":[
         {
            "_id":"637328ebf5c4b2558b064809",
            "iconpath":"https://cdnerapidxdevportal.azureedge.net/webdesignerimages/azure-active-directory-aad-icon-488x512-3d71nrtk.png",
            "title":"Azure AD",
            "description":"Azure Active Directory (Azure AD), part of Microsoft Entra, is an enterprise identity service that provides single sign-on, multifactor authentication, and conditional access to guard against 99.9 percent of cybersecurity attacks."
         }
      ]
   },
   {
      "_id":"63773144c3160f782c087e35",
      "nfrid":"637328ebf5c4b2558b064809",
      "nfrname":"azuread",
      "fileName":"index.js",
      "isImport":true,
      "isConst":false,
      "isComponent":false,
      "isNewFile":false,
      "isPackage":false,
      "landmark":null,
      "isAfter":null,
      "fileContent":"import { MsalProvider } from '@azure/msal-react';import { msalConfig } from './authConfig';import {PublicClientApplication } from '@azure/msal-browser';",
      "filePath":"src/index.js",
      "isIndexHtml":false,
      "projecttypeid":"6372366d1b568e00d8af2e44",
      "projecttypetitle":"PWA React",
      "nfrGitIo":[
         {
            "_id":"637328ebf5c4b2558b064809",
            "iconpath":"https://cdnerapidxdevportal.azureedge.net/webdesignerimages/azure-active-directory-aad-icon-488x512-3d71nrtk.png",
            "title":"Azure AD",
            "description":"Azure Active Directory (Azure AD), part of Microsoft Entra, is an enterprise identity service that provides single sign-on, multifactor authentication, and conditional access to guard against 99.9 percent of cybersecurity attacks."
         }
      ]
   },
]

我有很多標志,比如 isImport、isPackage、isIndexHtml 之類的。 我試圖將這些標志放在一個開關盒中,並在每個標志為真時調用個人 function。就像這樣,

for (let i = 0; i < cosmos.length; i++) {
        console.log(cosmos[0].isPackage);
        switch (cosmos[i]) {
            case `${cosmos[i].isImport  === true}`:
                const statusImport = common.updateImport(cosmos[i]);
                console.log(statusImport);
                break;
            // case `${cosmos[i].isConst === true}`:
            //     console.log("I own a dog");
            //     break;
            case `${cosmos[i].isPackage === true}`:
                const statusPackage = common.updatePackage(cosmos[i]);
                console.log(statusPackage);
                break;
            case `${cosmos[i].isIndexHtml === true}`:
                const statusIndexHtml = common.updateIndexHTML(cosmos[i]);
                console.log(statusIndexHtml);              
                break;
            // case `${cosmos[i].isNewFile === true}`:
            //     const statusNewFile = common.addNewFile(cosmos[i]);
            //     console.log(statusNewFile);
            //     break;
            default:
                console.log("Nothing to add/update");
                break;
            }
        }

但是當我運行它時,我總是得到默認的控制台日志。 我不知道我錯過了什么

這是我的第一個 switch case 實現。 有人能指出我正確的方向嗎?

不要將它們轉換為字符串,在 switch 條件下只添加true

for (let i = 0; i < cosmos.length; i++) {
        console.log(cosmos[0].isPackage);
        switch (true) {
            case cosmos[i].isImport:
                const statusImport = common.updateImport(cosmos[i]);
                console.log(statusImport);
                break;
            case cosmos[i].isPackage:
                const statusPackage = common.updatePackage(cosmos[i]);
                console.log(statusPackage);
                break;
            case cosmos[i].isIndexHtml:
                const statusIndexHtml = common.updateIndexHTML(cosmos[i]);
                console.log(statusIndexHtml);              
                break;
            default:
                console.log("Nothing to add/update");
                break;
            }
        }

switch不是在這種情況下使用的正確構造。 在這里簡單地使用if/else

由於您正在測試cosmos[i]中的幾個不同值,而不是針對多個可能的匹配項測試單個值,因此switch不是這里的正確工具。 (你可以使用它,就像你可以用扳手敲釘子一樣,但它不是正確的工具。)相反,使用if / else if / else鏈:

for (let i = 0; i < cosmos.length; i++) {
    if (cosmos[i].isImport) {
        const statusImport = common.updateImport(cosmos[i]);
        console.log(statusImport);
    } else if (cosmos[i].isPackage) {
        const statusPackage = common.updatePackage(cosmos[i]);
        console.log(statusPackage);
    } else if (cosmos[i].isIndexHtml) {
        const statusIndexHtml = common.updateIndexHTML(cosmos[i]);
        console.log(statusIndexHtml);
    } else {
        console.log("Nothing to add/update");
    }
}

另外,在新代碼中,我建議在不需要索引時使用for-of而不是for

for (const entry of cosmos) {
    if (entry.isImport) {
        const statusImport = common.updateImport(entry);
        console.log(statusImport);
    } else if (entry.isPackage) {
        const statusPackage = common.updatePackage(entry);
        console.log(statusPackage);
    } else if (entry.isIndexHtml) {
        const statusIndexHtml = common.updateIndexHTML(entry);
        console.log(statusIndexHtml);
    } else {
        console.log("Nothing to add/update");
    }
}

一條switch語句只能詢問一個變量。 在您的情況下,正確的解決方案是每個成員變量的if語句。 用這個片段替換 switch 語句:

 if (cosmos[i].isImport === true) { const statusImport = common.updateImport(cosmos[i]); console.log(statusImport); } if (cosmos[i].isPackage === true) { const statusPackage = common.updatePackage(cosmos[i]); console.log(statusPackage); } if (cosmos[i].isIndexHtml === true) { const statusIndexHtml = common.updateIndexHTML(cosmos[i]); console.log(statusIndexHtml); }

我注意到您的數據結構不會相互排除isImport isPackageisIndexHtml - 因此原則上它們的任何組合都可能是正確的,並且我建議的代碼將相應地執行。

暫無
暫無

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

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