TypeScript中Array.splice误删数组首个元素问题求助
问题原因及解决办法
为什么总是删除第一个元素?
Array.splice() 方法的第一个参数要求传入数组的索引值,但你现在直接把find()返回的消息对象传了进去。JavaScript在尝试将对象转换为数值时会得到NaN,而splice遇到NaN会默认按0处理,所以每次都会删掉数组的第一个元素。
正确的处理方式
有两种实用的解决方法:
方法1:直接查找元素索引
用findIndex()直接获取匹配消息的索引,再调用splice删除:
const msgIndex = this.messages.findIndex((msg: any) => msg.msgid === msgid); if (msgIndex !== -1) { // 先确认找到匹配元素 this.messages.splice(msgIndex, 1); }
方法2:通过元素获取索引后删除
如果仍想用find()找到元素,可以接着用indexOf获取该元素在数组中的索引:
const foundMsg = this.messages.find((msg: any) => msg.msgid === msgid); if (foundMsg) { const msgIndex = this.messages.indexOf(foundMsg); this.messages.splice(msgIndex, 1); }
注意:这种方法仅适用于数组元素为引用类型(比如你的消息对象),且
find()返回的是数组内原对象的情况。如果是值类型或对象是复制生成的,indexOf可能无法匹配到正确位置。
内容的提问来源于stack exchange,提问作者Almaszosz
相关产品推荐
相关产品推荐

