javascript - 关于 for-if 循环中 boolean 逻辑的混淆

标签 javascript boolean

我有一个对象列表,如果新对象不干扰列表中已经包含的对象(有点像碰撞检测),我将向该列表添加新对象。我正在尝试创建一个可以检测这种干扰的函数。

我将其设计为如果发生碰撞(不直观)则输出“false”,如果没有则输出“true”,因为稍后我将在 if 语句中使用此结果,并且我希望它在碰撞发生的情况下执行语句。该列表称为顶点。可能有很多错误,但我最困惑的是 boolean 函数的逻辑以及它如何通过 if 和 for 循环执行。

我想要的结果是,如果新对象干扰了列表中已有的任何对象,该函数将输出“false”,并且当且仅当对象出现时,它才会输出“true”不干扰任何元素。但是,我不认为我的代码正在执行我在此处描述的内容。 if 是否取第一个结果,“true”或“false”?如果所有结果都为真,它是否只输出“真”。我认为这是我的问题的关键(我可能弄错了)。

可能有更有效的方法来做到这一点(如果是这样,请告诉我!),但现在我实际上是用 for 循环遍历列表中的每个元素,然后编写碰撞测试if 语句。我的代码如下:

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } else 
    {
      return true
    }
  }
}

可能是碰撞条件本身有问题(“...或...或...”),但我认为情况并非如此。我认为我上面描述的逻辑有问题。如果有人能给我一些可以解决问题的解释,将不胜感激。如您所知,我对此很陌生。谢谢!

最佳答案

return true 移到 for 循环之外。

只有在没有找到结果的情况下循环结束,它才会返回 true。

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } 
  }
 return true;
}

关于javascript - 关于 for-if 循环中 boolean 逻辑的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908381/

相关文章:

javascript - 通过 Google API 查找组织的公共(public)社交媒体资料

javascript - 谷歌地图 Javascript : adding user photo to a marker

C# ||运算符不使用可为空的 boolean 值

java - 如何将 else false 添加到 boolean 方法

java - 如何将数组放入 IF 语句中

javascript - Webpack 构建时不包含对等依赖项

javascript - 声明对象时访问属性?

javascript - 如何显示数字输入类型的自定义验证消息

iphone - ios objective C Bool 未设置

c# - 试图理解这个 : bool variables are value types in C#