咨询在localStorage中追加存储用户对象的代码可行性
你的注册表单localStorage存储逻辑修正方案
嘿,你的思路方向是对的,但代码里有两个关键小问题会导致它没法正常工作,咱们来一步步理清楚并修正:
现有代码的核心问题
- 键名不统一:你读取localStorage时用的键是
'Користувачі',但存储时用的是'Users',这会导致永远读不到已有的用户数据,每次都会走if(!clientsArr)分支,直接覆盖存储单个对象,根本没法实现累加用户的效果。 - 存储格式不一致:第一次存储的是单个
clientObj对象,而非数组。等后续提交时,尝试调用clientsArr.push(clientObj)会直接报错——因为对象没有push方法,只有数组才有。
修正后的可行代码
const registrationForm = document.getElementById('registration'); registrationForm.addEventListener('submit', e => { e.preventDefault(); // 获取表单输入值 const regName = document.querySelector(".registration__name").value; const regPassword = document.querySelector(".registration__password").value; const regEmail = document.querySelector(".registration__email").value; const clientObj = { name: regName, password: regPassword, email: regEmail }; // 统一使用同一个键名(这里用'Users',你也可以换成'Користувачі',只要前后一致就行) let clientsArr = JSON.parse(localStorage.getItem('Users')); // 如果localStorage里没有数据,先初始化一个空数组 if (!clientsArr) { clientsArr = []; } // 往数组中添加新用户对象 clientsArr.push(clientObj); // 将更新后的数组重新存入localStorage localStorage.setItem('Users', JSON.stringify(clientsArr)); })
关键修改说明
- 统一键名:读取和存储都使用同一个键,确保能正确获取到已有的用户数据。
- 统一存储格式:无论是否是第一个用户,始终存储数组类型的数据。第一次没有数据时先初始化空数组,这样后续调用
push方法就不会出错。 - 变量规范:将不需要重新赋值的变量改用
const声明,代码更严谨。
这样修改后,你的逻辑就完全可行了——每次提交表单时,要么取出已有的用户数组,要么初始化空数组,添加新用户后再存回localStorage,完美实现你想要的累加用户的需求。
内容的提问来源于stack exchange,提问作者Артем Мирошниченко
相关产品推荐
相关产品推荐

