使用for循环向JS数组推入对象时出现大量重复项求助
问题原因
你的代码每次点击按钮时,都会遍历firstNameArr的所有元素,把每一组姓名对象重新推入pairedArray,导致每次新增都会重复之前所有的条目。另外你还漏掉了获取姓氏输入框的值并更新lastNameArr的逻辑。
解决方案
只需要在每次点击时,将当前输入的名和姓组成一个新对象,直接添加到pairedArray即可,不需要循环整个数组。同时补充姓氏输入的处理逻辑:
let pairedArray = []; let firstNameArr = []; let lastNameArr = []; function addMe(){ // 获取两个输入框元素 let firstNameInputElem = document.querySelector('.js-firstName'); let lastNameInputElem = document.querySelector('.js-lastName'); // 获取并过滤输入值 const firstName = firstNameInputElem.value.trim(); const lastName = lastNameInputElem.value.trim(); // 避免添加空值条目 if (!firstName || !lastName) return; // 更新单元素数组 firstNameArr.push(firstName); lastNameArr.push(lastName); // 直接创建新的关联对象并添加到目标数组 const nameObject = { fname: firstName, lname: lastName }; pairedArray.push(nameObject); // 清空输入框 firstNameInputElem.value = ''; lastNameInputElem.value = ''; console.log(pairedArray); }
<input type="text" class="js-firstName" placeholder="First Name"> <input type="text" class="js-lastName" placeholder="Last Name"> <button class="js-add" onclick="addMe()">Add to Object</button>
补充说明
如果后续需要同步两个单数组的所有元素生成关联对象(比如修改历史条目后重新生成),也可以采用先清空pairedArray再重新遍历生成的方式,但这种方式效率不如直接添加新元素:
function addMe(){ let firstNameInputElem = document.querySelector('.js-firstName'); let lastNameInputElem = document.querySelector('.js-lastName'); const firstName = firstNameInputElem.value.trim(); const lastName = lastNameInputElem.value.trim(); if (!firstName || !lastName) return; firstNameArr.push(firstName); lastNameArr.push(lastName); // 清空旧数据后重新生成所有关联对象 pairedArray = []; for (let i = 0; i < firstNameArr.length; i++){ pairedArray.push({ fname: firstNameArr[i], lname: lastNameArr[i] }); } firstNameInputElem.value = ''; lastNameInputElem.value = ''; console.log(pairedArray); }
内容的提问来源于stack exchange,提问作者Theodore Steiner
相关产品推荐
相关产品推荐

