如何在javascript(p5.js)中相互比较数组(列表)(对象)的所有元素

时间:2019-11-17 13:00:31

标签: javascript arrays compare p5.js

实际上我使用的是p5.js,但我想内置函数中的js也应以与javascript中相同的方式工作。

给出是存储在数组中的动态生成对象的列表。这些对象具有坐标(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)
    }
  }

1 个答案:

答案 0 :(得分:0)

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

但是,最重要的是,您应该放

array_of_objects.unshift(element)
第二个for循环的

外部(将其向下移动2行)。否则,您将多次取消移动它,该操作只应发生一次。

(而且我不确定您的原始代码中是否确实如此),您缺少右花括号。