检查switch语句中的数组长度

时间:2017-07-26 07:14:33

标签: javascript

我正在考虑使用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"

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

3 个答案:

答案 0 :(得分:4)

使用switch,您可以将表达式与值进行比较,为每个值执行操作。在您的情况下,您可以像这样切换array.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 parameters以了解可以使用它的最佳方案。

答案 1 :(得分:2)

switch语句的惯用用法如下:

 switch(array.length) {
     case 0: // ...
     default: // ...
 }

但是,您可以假设可以使用表达式代替case标签中的值。以下内容适用:



function oddOrEven(array) {
  switch (true) {
    case array.length === 0:
      throw 'Error';

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

console.log(oddOrEven([0]));
console.log(oddOrEven([2, 5, 34, 6]));




显然,在这种情况下,使用if语句是更具可读性的方法。

答案 2 :(得分:0)

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

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