Oop 如何使用for…of从数组中删除实例本身?

Oop 如何使用for…of从数组中删除实例本身?,oop,ecmascript-6,iterator,Oop,Ecmascript 6,Iterator,现在我有了一个数组“enermies”,包括几个类Enermy的实例,我想制作一个迭代器,如果一个Enermy被杀死,它将从数组中删除。 我知道如何用传统的JS写作 for(let i= enermies.length-1;i>=0;i--){ if(enermies[i].iskilled){ enermies.splice(i,1) } } 但是对于ES6,是否有更好的方法使用“for…of” 您的代码无法工作,因为slice不是一个变异函数,所以它什么都

现在我有了一个数组“enermies”,包括几个类Enermy的实例,我想制作一个迭代器,如果一个Enermy被杀死,它将从数组中删除。 我知道如何用传统的JS写作

for(let i= enermies.length-1;i>=0;i--){
    if(enermies[i].iskilled){
       enermies.splice(i,1)
  }
}

但是对于ES6,是否有更好的方法使用“for…of”


您的代码无法工作,因为
slice
不是一个变异函数,所以它什么都不做。即使您使用了正确的
拼接
,删除循环中的元素也是危险的,您需要避免它。相反,最简单的方法之一是过滤:

 enemies = enemies.filter(enemy => !enemy.iskilled);
如果只处理一个元素,还可以执行以下操作:

const index=敌人.findIndex(敌人=>敌人.iskill);
如果(索引>=0),则拼接(索引1):

通过这种方式,您可以保留数组,并且不必重新分配新数组,但如果要删除多个元素,则需要执行适当的循环。

请注意,
enermies.slice(i,1)
实际上并不删除任何内容。你是想用
splice
?是的,应该是
splice
,现在我已经改正了,谢谢!你的回答对我帮助很大。
 enemies = enemies.filter(enemy => !enemy.iskilled);