[英]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]
此外,您的records
和records2
總是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.