如何遍历类对象数组并在 JavaScript 中使用函数 [重复]
Posted
技术标签:
【中文标题】如何遍历类对象数组并在 JavaScript 中使用函数 [重复]【英文标题】:How to Iterate through an Array of Class Objects and use functions in JavaScripts [duplicate] 【发布时间】:2019-11-14 15:00:10 【问题描述】:我想遍历一个对象数组并使用数组中对象中的一个函数。我来自JAVA,这样做很正常。出于这个原因,我猜它也适用于 JS,但我不确定如何。
我的代码如下所示:
class Whateever
constructor(ctx)
this.ctx
this.shotsFired = [];
onButtonPush()
let shot = new Shot(this.position.x, this.position.y);
this.shotsFired.push(shot);
//called every frame
update()
for (let shot in this.shotsFired)
shot.update(); <-- I want to call this function
shot.draw(this.ctx); <-- and that function
--
class shoot
constructor(x,y)
this.position =
x : x,
y : y
;
update()
// Do nothing
draw(ctx)
// do nothing
但是有了这个结构,我总是得到错误信息:
Whateever.js:40 Uncaught TypeError: shot.draw is not a function
at Whateever.update (ship.js:40)
at gameLoop (index.js:23)
shot.update() 函数自己工作。
我只想知道如何通过数组中的循环调用对象函数?
这是一个大班的简单片段。如果我要发布整个班级,那将是混乱的。问题绝对清楚!
对象数组 -> 迭代 -> 在迭代期间从对象调用函数。
如果您需要一个示例,我可以发布 JAVA 代码以明确我的意思。
【问题讨论】:
你需要确保onButtonPush
方法首先被执行。用new Shot
实例填充数组
你的Shot类真的有draw()函数吗?无论如何 - 清楚地表明问题的代码的工作示例会更有帮助。
Array 有一个 forEach
方法来循环遍历它
请添加镜头类
@akinjide - 如果未调用 onButtonPush(),则shotsFired 只是一个空数组,因此它永远不会尝试在 Shot 实例上调用 draw() 或 update()。跨度>
【参考方案1】:
为了遍历数组,您可以使用for...of:
let array = [a:1, b:2, c:3];
for (let item of array)
console.log(item);
因此,对于您的特定示例,它将是:
update()
for (let shot of this.shotsFired)
shot.update();
shot.draw(this.ctx);
甚至更简单:
update()
this.shotsFired.forEach(shot =>
shot.update();
shot.draw(this.ctx);
);
【讨论】:
@RedDeadRabbitThe Problem is not to go throug the array.
有点像,因为for (a in b)
将 keys 放入 a
,而不是值。请改用of
,它会立即生效。
谢谢! “in”和“of”之间有什么大的不同【参考方案2】:
使用时
for (let shot in this.shotsFired)
shot.update(); <-- I want to call this function
shot.draw(this.ctx); <-- and that function
for 循环实际上是在迭代键,所以你应该执行以下操作
for (let shot in this.shotsFired)
this.shotsFired[shot].update(); <-- I want to call this function
this.shotsFired[shot].draw(this.ctx); <-- and that function
但最终你不应该使用这种技术迭代数组
或者,您可以使用许多其他可用的迭代选项,例如 forEach 或 for of
【讨论】:
以上是关于如何遍历类对象数组并在 JavaScript 中使用函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
循环遍历多维数组以生成新数据并在节点 js / javascript 中追加新的键值
[Javascript]类数组对象为什么不能用for in进行遍历
尝试遍历两个数组并在 JavaScript 中正确格式化它们的输出