为什么我的带有 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>

对不起,我已经读过,与明显的 if else if 序列相比,主要优势是能够省略 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);
}

没有 breakcase 不会重新评估下一个 case 是否相等,而只是无条件地运行块 - 称为 fallthrough。我怀疑这是你想要的。使用多个连续的 if 语句(而不是 if-else 链)——或者如果您不关心日志语句,则直接使用 records2 方法。

其次,concat 创建一个新数组,它不会通过附加到它来改变目标。有关各种解决方案,请参阅 How to append something to an array? or How to extend an existing JavaScript array with another array, without creating a new array

你应该看看差价运算符:

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

此外,您的 recordsrecords2 将始终相同。