通过对象数组循环不同于编写冗余代码?

时间:2018-01-21 21:56:10

标签: javascript three.js

编辑:使用带有three.js库的js。

我们使用循环来避免冗余代码。但是,在这种情况下,for循环与6个几乎相同的行相同,它们应该完成同样的工作。

function isSeen(buttons) {
      var rez = true;
      if (!frustum.containsPoint(musMesh.position)) rez = false; //OK
/*
          for(i = 0; i < buttons.length; i++){
              console.log(i); //i does iterate through 0 to 5
              if (frustum.containsPoint((buttons[i]).position)) rez = true;
      }
*/ //^doesn't work
      if (frustum.containsPoint((buttons[0]).position)) rez = true;
      if (frustum.containsPoint((buttons[1]).position)) rez = true;
      if (frustum.containsPoint((buttons[2]).position)) rez = true;
      if (frustum.containsPoint((buttons[3]).position)) rez = true;
      if (frustum.containsPoint((buttons[4]).position)) rez = true;
      if (frustum.containsPoint((buttons[5]).position)) rez = true;
      return rez;
}

for循环导致错误:

  

未捕获的TypeError:无法读取属性&#39;材料&#39;未定义的

而后面的6条条件语句(它们做同样的事情)不会导致错误并且正常工作。到底是怎么回事?  此外,按钮 CubeGeometry 的数组,其中 MeshStandard 材料, musMesh 是相同的。

1 个答案:

答案 0 :(得分:0)

有更好的方法来实现这一目标,这将确保顺利循环。考虑以下事项:

...some code...
buttons
    .forEach( (button,i) => {
        rez = frustum.containsPoint(button.position) ? true : false;
    })
  • 如果buttons是一个数组,它将具有原型函数.forEach()
  • (button,i) => { ... }function(button,i)
  • 的简写
  • boolean_expression ? true : falseif(boolean_exp) true; else false;
  • 的简写