【发布时间】: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 && i != s。我希望它像 i is not equal to b and s 一样使用 i 一次。可能吗?如果是,那么如何?
编辑:我不会一直使用同一个不等式运算符。我想要一个适用于所有比较的代码,例如i < j && i > k、i == b && i != s 等等。简单起见,我只想让变量(此处为 i )使用两次(或更多)只使用一次或以更短的方式使用。
【问题讨论】:
-
![b, s].includes(i)?虽然这使用了更接近===和!==的SameValueZero algorithm,但无论如何你都应该使用它。 -
Check variable equality against a list of values 的副本 plus De Morgan’s laws:
i != b && 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