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

时间:2017-06-21 13:47:58

标签: javascript arrays tween

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

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

这是我的代码:

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的每个元素,我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您不需要从循环中返回任何内容,则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上进行补间。我在答案中忽略了那一部分。如果你澄清你的意图,我可以更新它。