运行 对数组的每个元素的函数
Run a function on every element of an array
我是 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
的每个元素,我该怎么做?
A map
(或者作为@JLRishe,如果您不需要 return 循环中的任何内容,则为 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
上进行补间。我忽略了答案中的那部分。如果你明确你的意图,我可以更新它。
我是 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
的每个元素,我该怎么做?
A map
(或者作为@JLRishe,如果您不需要 return 循环中的任何内容,则为 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
上进行补间。我忽略了答案中的那部分。如果你明确你的意图,我可以更新它。