聊天系统在线用户管理:无法更新数组内对象属性求解
问题分析与解决
嘿,我一眼就瞅见你代码里的两个小问题,这就是为啥数组里对象的属性死活更新不了的原因:
1. 变量名拼写不一致
你循环遍历的是users数组,但在尝试修改属性的时候写成了usuarios[i].id——这里的usuarios明显是拼写错误,应该和前面的数组名保持一致用users,不然你相当于在操作一个不存在的数组,自然改不了目标对象的属性。
2. 误用比较运算符代替赋值运算符
代码里的usuarios[i].id == client.id;是比较操作(用来判断两个值是否相等),而不是赋值操作。要修改对象的属性值,必须用单等号=,双等号==只会返回一个布尔值,完全不会改变变量本身的值。
修正后的完整代码
var users = []; var isOnline = false; // 检查用户是否在数组中,存在则更新socket id for (var i = 0; i < users.length; i++) { if (users[i].HId == usuario.id) { // 注意这里的usuario要确保是正确的用户对象 console.log("new id " + client.id ); console.log("id before " + users[i].id); users[i].id = client.id; // 修正:变量名+赋值运算符 console.log("id after " + users[i].id); isOnline = true; break; // 找到匹配项后跳出循环,提升效率 } } // 用户不存在则添加到数组 if (!isOnline) { users.push({ name: user.nome, HId: user.id, id: client.id }); }
另外给你提个小优化点:找到匹配的用户后加个break跳出循环,不用再遍历剩下的元素,能稍微提升点性能~
内容的提问来源于stack exchange,提问作者notExactlyAHero
相关产品推荐
相关产品推荐

