Javascript 检查switch语句中的数组长度

Javascript 检查switch语句中的数组长度,javascript,Javascript,我正在研究使用switch语句来检查数组的长度是否大于0。我可以使用if/else语句来实现这一点,但我想更轻松地使用switch语句,我有点困惑为什么下面的语句不起作用 给定一个数字数组,我的函数确定所有数字的和是奇数还是偶数 下面是它的外观: function oddOrEven(array) { switch(array) { case array.length === 0: throw 'Error'; break; case a

我正在研究使用
switch
语句来检查数组的长度是否大于
0
。我可以使用
if/else
语句来实现这一点,但我想更轻松地使用
switch
语句,我有点困惑为什么下面的语句不起作用

给定一个数字数组,我的函数确定所有数字的和是奇数还是偶数

下面是它的外观:

function oddOrEven(array) {

   switch(array) {
     case array.length === 0: 
       throw 'Error';
       break;

    case array.length > 0:
       answer = array.reduce((a, b)=>{
         return a + b;
       }) % 2 === 0 ? 'even' :  'odd'; 
       break;
   }
}
例子

oddOrEven([0]) returns "even"
oddOrEven([2, 5, 34, 6]) returns "odd"
oddOrEven([0, -1, -5]) returns "even"

我知道如果(array.length>0)我可以做
但正如我所说,我想习惯使用switch语句,并认为这也应该有效。

使用
switch
,将表达式与值进行比较,为每个值执行一个操作。在您的情况下,可以像这样切换
数组.length

function oddOrEven(array) {

   switch(array.length) {
     case 0: 
       throw 'Error';
       break;

     default: // in that case, array.length != 0, not > 0 necessarily
       answer = array.reduce((a, b)=>{
         return a + b;
       }) % 2 === 0 ? 'even' :  'odd'; 
       break;
   }
}

然而,在我看来,
if/else
是这里使用的正确方法。值得一看
switch
,以了解它可以在哪些最佳情况下使用。

我认为使用switch语句来检查数组长度不是一个好的做法。你应该这样做:

function oddOrEven(arr) {
   if(arr.length === 0) {
      throw 'Error';
   }
   return array.reduce((a, b)=>{
     return a + b;
   }) % 2 === 0 ? 'even' :  'odd'; 
}

switch
语句的惯用用法如下:

 switch(array.length) {
     case 0: // ...
     default: // ...
 }
但是,您正确地假设可以使用表达式而不是
大小写
标签中的值。以下工作将起作用:

函数oddOrEven(数组){
开关(真){
case array.length==0:
抛出“错误”;
case array.length>0:
返回数组.reduce((a,b)=>a+b)%2==0?偶数“:”奇数“;
}
}
console.log(oddOrEven([0]));

log(oddOrEven([2,5,34,6])请重新阅读
开关的文档。您可能想使用
if
语句来代替。@torazaburo因此
if
switch
语句不能互换使用?除非您想使用
switch(true)
hack,它是不被接受的,否则
switch
语句用于根据一组可能的值检查特定表达式,因此,在某些情况下,它可以替换
if
语句,但在其他情况下它不能。啊,好吧!这就是我想澄清的。那么什么时候你知道你是否应该使用
switch
over
if/else
?如果/else是更通用的,你可以一直使用它,但是如果你想将一个变量与一系列值进行比较,对每个值执行一个操作,那么switch就更干净了!例如,如果要在数组长度为0时执行某项操作,如果数组长度为1,则执行另一项操作,如果数组长度为2,则执行另一项操作;开关生成一个更干净的编码表!我现在明白了!只是需要这样的东西来澄清我脑子里的几个问题谢谢,但我知道我可以用
if/else
。我只是想知道
开关的等价物