2017-06-21 76 views
-2

我是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

回答

0

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

相關問題