繁体   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