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
overif/else
?如果/else是更通用的,你可以一直使用它,但是如果你想将一个变量与一系列值进行比较,对每个值执行一个操作,那么switch就更干净了!例如,如果要在数组长度为0时执行某项操作,如果数组长度为1,则执行另一项操作,如果数组长度为2,则执行另一项操作;开关生成一个更干净的编码表!我现在明白了!只是需要这样的东西来澄清我脑子里的几个问题谢谢,但我知道我可以用if/else
。我只是想知道开关的等价物