【问题标题】:Merging two comparisons with a common variable together将两个具有共同变量的比较合并在一起
【发布时间】:2021-08-17 12:45:00
【问题描述】:

我有一个功能如下:

bullets.forEach(function (b) {
        ships.forEach (function (s) {
          if (b.x1 >= s.x1 && b.x1 <= s.x2 && b.y1 >= s.y1 && b.y2 <= s.y2) {
             animationBucket = animationBucket.filter((i) => {
             return (i != b && i != s);
           }
           ); 

我想合并那些使用相同变量的比较,例如i != b &amp;&amp; i != s。我希望它像 i is not equal to b and s 一样使用 i 一次。可能吗?如果是,那么如何?

编辑:我不会一直使用同一个不等式运算符。我想要一个适用于所有比较的代码,例如i &lt; j &amp;&amp; i &gt; ki == b &amp;&amp; i != s 等等。简单起见,我只想让变量(此处为 i )使用两次(或更多)只使用一次或以更短的方式使用。

【问题讨论】:

  • ![b, s].includes(i)?虽然这使用了更接近===!==SameValueZero algorithm,但无论如何你都应该使用它。
  • Check variable equality against a list of values 的副本 plus De Morgan’s laws: i != b &amp;&amp; i != s!(i == b || i == s) 相同。
  • s.x2比较时,您的意思是b.x2而不是b.x1
  • @Bergi 不,它是 b.x2(子弹对象的 x+宽度)。我正在使用它进行碰撞检测。我想通过将两个 b.x1 与问题中给出的 s.x1 和 s.x2 进行比较来以更短的方式编写条件。
  • @BikramKumar 有这样的非对称代码很奇怪,这是将…1…2 进行比较的四个比较中的唯一一个。对每个阅读本文的人来说,这似乎是一个错误。如果是故意的,请添加说明理由

标签: javascript collision-detection logical-operators inequality


【解决方案1】:

不完全是,但您可以执行以下操作:

return ![b, s].includes(i);

【讨论】:

  • 没有一种方法适用于所有情况。虽然,您可以创建实用程序功能(特定于您的情况)。 function isStrictlyOutOfBounds(lower, upper, value) { return value &lt; lower &amp;&amp; value &gt; upper; }
【解决方案2】:

JavaScript 中还没有这样的东西。但是,也许这可能会在将来添加 :) 直到您可以使用一些辅助函数来完成您的任务。

【讨论】:

    猜你喜欢
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    相关资源
    最近更新 更多