如何修改从数组中移除元素的属性?Medusa类实现咨询
解决方案:移除雕像时重置Person的stoned属性
嘿,这个问题很好解决!你只需要利用shift()方法的返回特性就行——它在移除数组第一个元素的同时,会返回被移除的那个元素,我们刚好可以抓住这个返回值,把对应的person对象的stoned属性设为false。
实现思路
- 当
this.statues的长度超过3时,先调用shift()并把返回的对象存到一个变量里 - 直接修改这个变量的
stoned属性为false,因为我们拿到的是原对象的引用,修改它会直接改变原对象的状态
修改后的完整代码
class Medusa { constructor(name) { this.name = name; this.statues = []; } stare(person) { person.stoned = true; this.statues.push(person); if(this.statues.length > 3) { // 捕获被移除的person对象,重置其stoned属性 const freedPerson = this.statues.shift(); freedPerson.stoned = false; } } }; class Person { constructor(name) { this.name = name; this.stoned = false; } };
这样修改后,每当美杜莎的雕像数量超过3时,最早被石化的人会被解除石化(stoned设为false),同时从雕像数组中移除,完全符合你的需求。
内容的提问来源于stack exchange,提问作者mfaccord
相关产品推荐
相关产品推荐

