在数组的每个元素上运行函数

在数组的每个元素上运行函数

问题描述:

我是JavaScript新手,我想在数组的每个元素上运行函数。在数组的每个元素上运行函数

更具体地说,在我的代码中,我有一个onclick函数。当我点击一个元素时,我想要移动另外3个元素。问题是每次点击只有一个元素在移动。

这里是我的代码:

var intersects = raycaster.intersectObjects(reel); 
var intersects1 = raycaster.intersectObjects(rang1); 
var intersects2 = raycaster.intersectObjects(rang2); 
var intersects3 = raycaster.intersectObjects(rang3); 
var intersects4 = raycaster.intersectObjects(rang4); 
var inter1 = intersects1.join() 
console.log(intersects2) 

if (intersects.length > 0) { 
    //console.log(intersects1) 

    if (intersects[0].object.type === "Mesh") { 
     var objinter = intersects1[0].object; 
     //DEPLACEMENTS 

     new TWEEN.Tween(intersects1[0].object.position).to({ 
       x: objinter.userData.x0, 
       y: objinter.userData.y0, 
       z: objinter.userData.z0 
      }, 1000) 
      .easing(TWEEN.Easing.Elastic.Out).start(); 

    } 
}; 

是否有可能在阵列intersects1的每一个元素立刻打电话来,我会怎么做呢?

+2

这就是'map'的定义。查看数组的“地图”功能。 – Carcigenicate

+0

点击处理程序在哪里?你想要运行哪个数组? – Carcigenicate

+1

@Carcigenicate听起来像'.forEach'在这里更合适。 – JLRishe

A map(或者@JLRishe,foreach如果你不需要从循环中返回任何东西)将是你在这里需要的。注意正常for循环这里也将工作,但更高阶的功能很可能是实现这一目标的最巧妙的方法:

if (intersects.length > 0) { 
    //console.log(intersects1) 

    // For each element of intersects1, do... 
    // The current object being moved is called obj 
    intersects1.foreach(function(obj) { 
     if (obj.object.type === "Mesh") { 
      var objinter = obj.object; 

      new TWEEN.Tween(obj.object.position).to({ 
        x: objinter.userData.x0, 
        y: objinter.userData.y0, 
        z: objinter.userData.z0 
      }, 1000) 
      .easing(TWEEN.Easing.Elastic.Out).start(); 
     } 

    }) 

}; 

注意,我还是不完全明白你为什么检查intersects[0].object.type === "Mesh",却对代替intersects1补间。我在答案中忽略了这一部分。我可以更新它,如果你澄清你的意图。

+0

非常感谢!我有点惭愧......这很简单......谢谢你的时间! – ThomasSzy

+0

没问题。如果这解决了您的问题以将问题标记为已解决,请打勾。 – Carcigenicate