如何使用jQuery获取localStorage中匹配指定用户名的特定值
问题根因
遍历localStorage存储的多用户数据时逻辑存在错误:for...in 循环遍历data_user过程中,每次迭代都会覆盖entry变量,循环执行完成后entry只会保留最后一条遍历到的用户记录,此时再做用户名匹配,自然无法命中和aa对应的目标用户。同时原代码引用了未定义的entry2变量,会直接导致内容渲染逻辑报错。
存储结构参考

修正后可运行代码
// 读取当前登录的目标用户名 const aa = JSON.parse(localStorage.getItem("a")) $('#isinama').text('Welcome ' + aa) // 读取localStorage中存储的全量用户数据 const data_user1 = JSON.parse(localStorage.getItem('data_user')) // 遍历过程中实时匹配目标用户,不要等循环结束再做判断 for (const index in data_user1) { const currentUserEntry = data_user1[index] // 命中当前登录用户时,直接渲染该用户关联的内容 if (aa === currentUserEntry.username) { // 注意:此处替换为你实际存储用户发言内容的数组字段,原代码entry2为未定义的无效变量 $.each(currentUserEntry.posts, function(i, data) { $('#listcurhat').append(`<div class="card mb-3" style="max-width:24rem;"> <div class="card-header" id="isinama2">${aa}</div> <div class="card-body"> <p class="card-text">${data.textcurhat}</p> </div> </div>`) }) // 匹配完成后直接终止循环,减少不必要的性能消耗 break } }
注意事项
- 代码中
currentUserEntry.posts需要替换为你data_user结构里实际存储用户发言列表的字段名,和你本地存储结构保持一致即可 - 建议使用
const/let声明变量,不要直接裸写变量赋值,避免造成全局变量污染 - 匹配到目标用户后直接跳出循环,不需要遍历剩余无关用户数据
内容的提问来源于stack exchange,提问作者Bagas Rizkiyanto
相关产品推荐
相关产品推荐

