为何调用splice(0,1)未删索引0元素反而删除索引1元素?
问题原因及解决方法
你的代码如下:
selectedRoles= [1,230] if(this.selectedRoles.length > 1) { this.selectedRoles= this.selectedRoles.splice(0,1); }
问题出在对Array.splice()方法的理解偏差上:
splice()有两个关键特性:它会直接修改原数组,同时返回被删除元素组成的新数组。- 执行
this.selectedRoles.splice(0,1)时,原数组已经被修改为[230](确实删掉了索引0的元素1),但这个方法返回的是被删掉的元素组成的数组[1]。 - 你把这个返回值重新赋值给了
selectedRoles,导致最终selectedRoles变成了[1],看起来像是“删掉了230”,但实际是你覆盖了原本已经正确修改的数组。
要实现你的需求,不需要给selectedRoles重新赋值,直接调用splice()修改原数组即可:
selectedRoles= [1,230] if(this.selectedRoles.length > 1) { this.selectedRoles.splice(0,1); }
执行后selectedRoles就会变成[230],符合你删除索引0元素的预期。
内容的提问来源于stack exchange,提问作者testy
相关产品推荐
相关产品推荐

