JavaScript代码异常:user对象的msg数组仅保留最后一个值,push失效
问题排查与解决:数组Push仅保留最后一个值
我一眼就发现问题所在了——你每次处理同一个用户时,都会强制重置它的msg数组为空,之前存储的历史数据直接被覆盖,最后自然只剩最后一次push的内容!
问题代码分析
看这段关键代码:
var msg = theUser.msg = []; msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
不管当前用户的theUser.msg是否已经存在(是否有历史消息),你每次循环到该用户时,都会把theUser.msg重新赋值为空数组,再push当前消息。这就相当于每次都把之前的聊天记录清空,只保留最新的那一条。
修复方案
我们需要先判断theUser是否已有msg数组,没有的话再初始化,有就直接复用原数组进行push操作。修改后的代码如下:
方案一(简洁写法):
// 若msg不存在则初始化空数组,存在则直接使用原数组 var msg = theUser.msg || (theUser.msg = []); msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
方案二(更易读的写法):
// 先检查msg是否存在,不存在则创建空数组 if (!theUser.msg) { theUser.msg = []; } // 直接向已有/新建的数组中push消息 theUser.msg.push(i.nextElementSibling.nextElementSibling.innerHTML);
修复逻辑说明
- 第一次处理某个用户时,
theUser.msg不存在,会创建一个空数组并push当前消息; - 后续再处理同一个用户时,直接使用已经存在的数组push新消息,历史数据不会被覆盖,就能累积所有对应的消息了。
内容的提问来源于stack exchange,提问作者Reza Saadati
相关产品推荐
相关产品推荐

