我正在考虑使用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语句,并认为这也应该有效。
答案 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';
}