2017-06-21 8 views
-2

Ich bin neu in JavaScript und ich möchte eine Funktion für jedes Element eines Arrays ausführen.Führen Sie eine Funktion für jedes Element eines Arrays

Um genauer zu sein, in meinem Code habe ich eine onclick Funktion. Wenn ich auf ein Element klicke, möchte ich, dass sich 3 andere Elemente bewegen. Das Problem ist, dass sich nur 1 Element für jeden Klick bewegt.

Hier ist mein Code:

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(); 

    } 
}; 

Ist es möglich, intersects1 sofort jedes Element des Arrays zu nennen, und wie würde ich das tun?

+2

Das ist die Definition dessen, was 'map' tut. Suchen Sie die 'map' -Funktion des Arrays. – Carcigenicate

+0

Wo ist der Click-Handler? Und über welches Array soll die Funktion ausgeführt werden? – Carcigenicate

+1

@Carcigenicate Sounds wie '.forEach' wären hier besser geeignet. – JLRishe

Antwort

0

Ein map (oder als @JLRishe, ein foreach, wenn Sie nichts aus der Schleife zurückgeben müssen) wäre, was Sie hier brauchen. Beachten Sie eine normale for Schleife würde hier arbeiten, aber eine Funktion höherer Ordnung wäre wahrscheinlich die sauberste Weg, dies zu erreichen:

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(); 
     } 

    }) 

}; 

Hinweis, ich immer noch nicht ganz verstehen, warum Sie intersects[0].object.type === "Mesh" überprüfen, aber dann tun ein Tween auf intersects1 stattdessen. Ich habe diesen Teil in der Antwort ignoriert. Ich kann es aktualisieren, wenn Sie Ihre Absicht klarstellen.

+0

Vielen Dank! Ich bin ein bisschen beschämt ... es war so einfach ... Danke für deine Zeit! – ThomasSzy

+0

Kein Problem. Klicken Sie auf das Häkchen, wenn das Ihr Problem löst, um die Frage als gelöst zu markieren. – Carcigenicate

Verwandte Themen