JavaScript数组中判断用户ID是否存在并添加用户问题求助
解决JavaScript数组中仅添加不存在ID用户的问题
我来帮你搞定这个问题!首先得先说说你原代码的问题所在:
你原来的循环逻辑是只要当前遍历到的用户ID不等于目标ID,就立刻添加新用户,这会导致两个严重问题:
- 只要数组里有一个用户ID不是目标ID,就会执行
push,比如第一个用户ID是2,不等于1,直接就把新用户加进去了,完全没考虑后面还有ID为1的用户; - 你在循环过程中修改了数组长度,
users.length会不断增加,循环会一直跑下去(直到内存撑不住),这是个无限循环的隐患。
下面给你几种正确的实现方式,按需选择:
方法1:用Array.some()快速判断(推荐,简洁高效)
some()方法会遍历数组,只要找到一个符合条件的元素就返回true,否则返回false,非常适合用来检查ID是否存在:
var users = [ { id: 2, name: "Kevin" }, { id: 1, name: "Jason" } ]; const newUser = { id: 1, name: "Adam" }; // 检查数组中是否存在和新用户ID相同的元素 const isUserExists = users.some(user => user.id === newUser.id); // 只有不存在的时候才添加 if (!isUserExists) { users.push(newUser); } console.log(users); // 输出:[{ id: 2, name: "Kevin" }, { id: 1, name: "Jason" }]
如果把新用户的ID改成3,就会成功添加进去,最终数组会包含三个用户。
方法2:用Array.find()查找存在的用户
find()方法会返回第一个匹配条件的元素,找不到就返回undefined,也能实现需求:
var users = [ { id: 2, name: "Kevin" }, { id: 1, name: "Jason" } ]; const newUser = { id: 1, name: "Adam" }; const existingUser = users.find(user => user.id === newUser.id); if (!existingUser) { users.push(newUser); }
方法3:兼容旧浏览器的传统循环写法
如果需要支持非常老的浏览器(不支持ES6的数组方法和箭头函数),可以用传统循环,但要注意先完成整个遍历判断,再决定是否添加:
var users = [ { id: 2, name: "Kevin" }, { id: 1, name: "Jason" } ]; var newUser = { id: 1, name: "Adam" }; var userExists = false; // 先完整遍历数组,检查ID是否存在 for(var i = 0; i < users.length; i++){ if(users[i].id === newUser.id){ userExists = true; break; // 找到后直接跳出循环,不用浪费性能继续遍历 } } // 不存在则添加 if (!userExists) { users.push(newUser); }
这几种方法都能实现你的核心需求:仅当用户ID不存在于数组时,才添加该用户,不会出现原代码的循环异常和重复添加问题。
内容的提问来源于stack exchange,提问作者Hellbyte
相关产品推荐
相关产品推荐

