【问题标题】:How to compare all elements of an array(list) (of objects) with each other in javascript (p5.js)如何在javascript(p5.js)中相互比较数组(列表)(对象)的所有元素
【发布时间】:2019-11-17 13:00:31
【问题描述】:

其实我用的是p5.js,但是我想js内置的函数应该也和javascript一样。

Given 是存储在数组中的动态生成对象的列表。对象具有坐标 (x,y)、大小和一些其他属性。这些对象根据它们的属性(方向、速度)在屏幕上移动

我想写一个函数,在这里我可以检查物体的坐标,如果它们发生碰撞,它们应该改变方向,例如为此,我需要将数组的每个元素与其他元素进行比较。

由于我有许多我不知道的元素,所以我用

进行迭代
for (let i in array)

然后我想弹出第一个元素,并在包含的每个循环中将它与数组的其余部分进行比较。

在这个循环之后,我想把这个元素移到数组中,以便对整个数组做同样的事情。

我想,pop() 的内置函数没有返回这个元素,因为我得到一个错误,这让我想,这个数组的对象被其他东西改变了。

我该如何解决这个问题?

这是我的这个函数的代码:

function checkCollisions() {

  for (let i in array_of_objects) {
    let element = array_of_objects.pop()
    for (let j in array_of_objects) {
      if (comparison_of_some_attributes_between(element, array_of_objects[j])) {
      some_changes_on_attributes_of(element, array_of_objects[j])
      }
      array_of_objects.unshift(element)
    }
  }

【问题讨论】:

    标签: javascript arrays compare p5.js


    【解决方案1】:

    您正在使用 for each 循环,它存储对象,而不是变量中的索引(ij)。 因此,您应该只使用j 而不是array_of_objects[j]

    然而,最重要的是,你应该把

    array_of_objects.unshift(element)
    

    在第二个 for 循环之外(向下移动 2 行)。否则,您将多次取消移位,而它应该只发生一次。

    另外,(我不确定这在您的原始代码中实际上是否相同),您缺少一个右大括号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多