簡體   English   中英

為什么我的帶有switch(true)和Array.concat()的代碼無法正常工作

[英]Why my code with switch(true) and Array.concat() doesn't work properly

 //JavaScript: function concatArrays() { var recentlyCompleted = ["rc1", "rc2"]; var upcomingActivities = []; var decisionsRequired = []; var records = []; switch(true) { case (recentlyCompleted.length >0): records.concat(recentlyCompleted); console.log("recentlyCompleted.length >0"); console.log(records); case (upcomingActivities.length >0): records.concat(upcomingActivities); console.log("upcomingActivities.length >0"); console.log(records); case (decisionsRequired.length >0): records.concat(decisionsRequired); console.log("decisionsRequired.length >0"); console.log(records); break; } document.getElementById("demo").innerHTML = JSON.stringify(records); var records2 = recentlyCompleted.concat(upcomingActivities).concat(decisionsRequired); document.getElementById("demo2").innerHTML = JSON.stringify(records2); } 
  <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>switch(true)</title> </head> <body> <p>Click the button to join arrays.</p> <button onclick="concatArrays()">Try it</button> <p id="demo"></p> <p id="demo2"></p> </body> 

抱歉,我已經讀過,如果不是序列,則相對於顯而易見的主要優勢是可以忽略break語句並執行多個塊。 我想在我的case(true)代碼中執行多個塊。 但是我發現這個簡單的代碼有問題。

非常抱歉,您能否使用switch(true)解釋部分代碼出了什么問題,謝謝!

執行一個以上的塊: 執行一個以上的塊

正確答案執行的屏幕截圖: 在此處輸入圖片說明

function concatArrays() {
  var recentlyCompleted = ["rc1", "rc2"];
  var upcomingActivities = [];
  var decisionsRequired = [];
  var records = [];
  switch (true) {
    case (recentlyCompleted.length > 0):
      records = records.concat(recentlyCompleted);
      console.log("recentlyCompleted.length >0");
      console.log(records);
    case (upcomingActivities.length > 0):
      records = records.concat(upcomingActivities);
      console.log("upcomingActivities.length >0");
      console.log(records);
    case (decisionsRequired.length > 0):
      records = records.concat(decisionsRequired);
      console.log("decisionsRequired.length >0");
      console.log(records);
      break;
  }
  document.getElementById("demo").innerHTML =
    JSON.stringify(records);

  var records2 = recentlyCompleted
    .concat(upcomingActivities)
    .concat(decisionsRequired);
  document.getElementById("demo2").innerHTML =
    JSON.stringify(records2);
}

一個case沒有break不重新評估接下來的case平等,但只是運行塊無條件地-所謂的下通 我懷疑這就是您想要的。 而是使用多個連續的if語句(而不是if-else鏈)-如果您不關心log語句,請直接使用records2方法。

其次, concat創建一個新數組,它不會通過追加目標來對其進行突變。 請參見如何向數組追加內容? 如何用另一個數組擴展現有的JavaScript數組,而無需為各種解決方案創建新的數組

您應該看一下價差運算符:

var records = [...recentlyCompleted, ...upcomingActivities, ..decisionsRequired]

此外,您的recordsrecords2總是相同的。

暫無
暫無

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

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