使用JavaScript验证数组中是否存在重复键值
解决重复ID数据添加问题
你的问题出在判断重复ID的逻辑上——people是一个数组,不是单个对象,直接用people["idperson"]根本取不到任何有效数据,这个判断条件永远为true,所以不管ID是否重复都会把数据推进数组里。
我们可以用数组的some()方法来检查数组中是否已经存在相同idperson的元素,它会遍历数组,只要有一个元素满足条件就返回true,否则返回false。
修正后的代码如下:
<div class="form"> <input type="text" id="idperson" placeholder="输入ID"> <input type="text" id="name" placeholder="输入姓名"> <button id="add" type="button">ADD</button> </div> <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> <script> var people = []; $("#add").click(function(){ var iduser = $("#idperson").val().trim(); // 去除前后空格,避免无效空字符 var name = $("#name").val().trim(); // 先做非空验证,提升用户体验 if(!iduser || !name) { alert("ID和姓名不能为空!"); return; } // 检查数组中是否已存在相同ID的元素 var isDuplicate = people.some(function(person) { return person.idperson === iduser; }); if(!isDuplicate){ people.push({idperson:iduser, nameperson:name}); alert("添加成功!"); } else { alert("该ID已存在,请勿重复添加!"); } console.log(people); }); </script>
关键逻辑说明:
- 输入预处理:用
.trim()去除输入内容的前后空格,避免用户误输入空格导致的无效数据。 - 非空校验:先检查ID和姓名是否为空,避免无意义的空数据添加。
- 重复判断:
people.some(...)遍历数组中的每个person对象,对比idperson值,只要有匹配项就标记为重复。 - 分支处理:无重复则添加数据并提示成功,有重复则提示用户避免重复操作。
如果需要兼容更老旧的浏览器,也可以用for循环来实现重复判断:
// 替代some()的for循环写法 var isDuplicate = false; for(var i=0; i<people.length; i++){ if(people[i].idperson === iduser){ isDuplicate = true; break; // 找到重复项就停止遍历,提升效率 } }
这样就能有效避免重复ID的数据被添加到数组里了。
内容的提问来源于stack exchange,提问作者NekoLopez
相关产品推荐
相关产品推荐

