Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用多个和/或选项缩短if条件_Javascript - Fatal编程技术网

在JavaScript中使用多个和/或选项缩短if条件

在JavaScript中使用多个和/或选项缩短if条件,javascript,Javascript,我有一段代码(我认为这是非常低效和糟糕的;不过我可能错了。),它检查一个变量是否在由其他变量确定的范围内,就像这样 if ((a >= (x.eq(0) && y.eq(0)) || (a >= x.eq(1) && y.eq(1)) ... || (a >= x.eq(n) && y.eq(n)))) { // code here } (问题中括号的数量可能有误,但代码本身是有效的。) 其中n是数组x和y中的数字总数。

我有一段代码(我认为这是非常低效和糟糕的;不过我可能错了。),它检查一个变量是否在由其他变量确定的范围内,就像这样

if ((a >= (x.eq(0) && y.eq(0)) || (a >= x.eq(1) && y.eq(1)) ... || (a >= x.eq(n) && y.eq(n)))) {
    // code here
}
(问题中括号的数量可能有误,但代码本身是有效的。)

其中n是数组x和y中的数字总数。。显然,如果条件看起来非常非常大,我相信它是未优化的和“坏的”。 有什么我可以用来缩短病情的吗?如果上面的块不可读,我需要伪代码:

检查a是否在x(0)和y(0)之间。
如果是真的,那就行动起来。
否则检查a是否在x(1)和y(1)之间。
如果是真的,那就行动起来。
否则请检查。。。如果a在x(n)和y(n)之间。
如果是真的,那就行动起来。
否则什么也不做


你想要这样的吗

// try every number between 0 and n
for (var i = 0; i++, i < n) {
  // generic version of your condition
  if (a >= (x.eq(i) && y.eq(i)) {
    // do the things
    break; // break the loop so the things are only done once
  }
}
//尝试0到n之间的每个数字
对于(变量i=0;i++,i=(x.eq(i)和y.eq(i)){
//做事
break;//打破循环,使事情只做一次
}
}

你想要这样的东西吗

// try every number between 0 and n
for (var i = 0; i++, i < n) {
  // generic version of your condition
  if (a >= (x.eq(i) && y.eq(i)) {
    // do the things
    break; // break the loop so the things are only done once
  }
}
//尝试0到n之间的每个数字
对于(变量i=0;i++,i=(x.eq(i)和y.eq(i)){
//做事
break;//打破循环,使事情只做一次
}
}

如果满足一个条件,您可以使用
进行循环并退出。您需要对带有a和左右边框的范围chekc进行右比较

var i;
for (i = 0; i <= n; i++) {
    if (x.eq(i) <= a && a <= y.eq(i)) {
        // do something
        break;
    }
}

如果满足一个条件,您可以对
循环使用
,然后退出。您需要对带有a和左右边框的范围chekc使用右比较

var i;
for (i = 0; i <= n; i++) {
    if (x.eq(i) <= a && a <= y.eq(i)) {
        // do something
        break;
    }
}

您可以创建一个可重复使用的函数,该函数生成一系列数字,并检查您的条件是否满足:

//用法:
//在…之间
//(0,10)//范围的开始和结束
//(x,y)//函数,在您的例子中,传递x.eq和y.eq
//(a)//您的“a”值
//返回true或false
常数在n=(开始数,结束数)=>(x,y)=>a=>
[…数组(endNum+1).keys()].slice(startNum)//数字范围(包括)
.一些(num=>(a>=x(num)和&ax;
const res1=isbetweany(1,10)(映射,映射)(1)//true:1在[0…10]范围内
const res2=isbetweany(2,10)(映射,映射)(1)//false:1不在[2…10]范围内

console.log(res1,res2)
您可以创建一个可重用的函数,该函数生成一系列数字,并检查您的条件是否满足:

//用法:
//在…之间
//(0,10)//范围的开始和结束
//(x,y)//函数,在您的例子中,传递x.eq和y.eq
//(a)//您的“a”值
//返回true或false
常数在n=(开始数,结束数)=>(x,y)=>a=>
[…数组(endNum+1).keys()].slice(startNum)//数字范围(包括)
.一些(num=>(a>=x(num)和&ax;
const res1=isbetweany(1,10)(映射,映射)(1)//true:1在[0…10]范围内
const res2=isbetweany(2,10)(映射,映射)(1)//false:1不在[2…10]范围内

console.log(res1、res2)一旦语句变得不可读,通常考虑将功能转移到一个开关语句中。请检查这个问题。“代码> N<代码/代码>有多大?如果总是在范围内,或是不同的话,它总是相同的吗?或者将逻辑组分配给命名变量,这样最终语句读起来就更像一个句子。”e> if(xyAreEqual&&xInRangeZ)请加上什么标签<代码>数组< /COD>与问题有关。@ Niasasrz我认为X和Y是数组,因此标签是相当新的,所以对我来说可能是个错误。一旦语句变得不可读,通常考虑将功能转移到交换语句中。如果在范围内,那么要做的事情总是相同的,还是不同的?…或者将逻辑组分配给命名变量,使最终语句看起来更像一个句子。
if(xyAreEqual&&xInRangeZ)//等等。
请添加标签
array
与问题有关的内容。@NinaScholz我认为x和y是数组,因此标签?对SO来说是相当新的,所以可能是我的一个错误。非常多!不过,继续问问题,可能吗(这是个好主意)将整个过程封装在一个函数中,并使用索引参数而不是声明i,或者这是一个过于复杂的任务?@IvanTalanov我认为这取决于你的用例。一个好名字的函数可以帮助提高可读性,但你必须决定它是否值得。祝你好运!:DAs@Sandman在评论中说,最重要的是elegant解决方案(至少对我来说,因为n的值并不太大(非常大!不过,接下来的问题是,可能吗(这是个好主意)将整个过程封装在一个函数中,并使用索引参数而不是声明i,或者这是一个过于复杂的任务?@IvanTalanov我认为这取决于你的用例。一个好名字的函数可以帮助提高可读性,但你必须决定它是否值得。祝你好运!:DAs@Sandman在评论中说,最重要的是elegant解决方案(至少对我来说,因为n的值并不太大(