[英]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.