新闻中心
从 localStorage 中删除数组中指定项的教程

本文详细介绍了如何在 `localstorage` 中存储的数组对象中,准确删除特定项目。核心问题在于 j*ascript 中严格相等运算符 `!==` 与数据类型不匹配时导致的删除失败。教程将分析问题根源,并提供两种解决方案:使用非严格相等运算符 `!=`,以及更推荐的显式类型转换方法,确保比较的准确性与代码的健壮性。
在 localStorage 数组中删除指定项
在 Web 开发中,localStorage 是一个常用的客户端存储机制,用于持久化少量数据。当我们需要存储一组结构化数据(如购物车商品列表、用户配置项等)时,通常会将其序列化为 JSON 字符串并存储。从这些数组中删除特定项目是常见的操作,但如果不注意细节,可能会遇到意想不到的问题。
考虑一个典型场景:我们将一个商品列表存储在 localStorage 中,其中每个商品都是一个包含 item_id、item_name 和 qty 等属性的对象。当用户希望从列表中删除某个商品时,我们需要根据其 item_id 来定位并移除。
常见问题分析:严格相等与类型不匹配
假设 localStorage 中存储的数据结构如下,其中 key 是 emp_id,对应的值是一个商品数组:
// localStorage key: "189"
[
{"item_id":"50","item_name":"Delivery T-Shirt Medium danger","qty":1},
{"item_id":"49","item_name":"Delivery T-Shirt Small danger","qty":"1"},
{"item_id":"51","item_name":"Delivery T-Shirt Large danger","qty":"1"},
{"item_id":"11","item_name":"Bread Pant 30 white","qty":"1"}
]为了实现删除功能,我们可能会编写一个类似以下的函数:
function Deleteitem(emp_id, item_id_to_delete) {
var itemDetails = localStorage.getItem(emp_id);
if (itemDetails) {
itemDetails = JSON.parse(itemDetails);
// 尝试过滤掉要删除的项
itemDetails = itemDetails.filter(function(item) {
return item.item_id !== item_id_to_delete; // 核心比较逻辑
});
localStorage.setItem(emp_id, JSON.stringify(itemDetails));
}
// 假设有一个函数用于更新显示
displayItemDetails();
}这段代码的逻辑看起来很合理:获取数据、解析 JSON、使用 filter 方法遍历数组,当 item.item_id 与 item_id_to_delete 不相等时保留该项。然而,如果 item_id_to_delete 的数据类型与 item.item_id 在数组中的数据类型不一致,并且使用了严格不相等运算符 !==,那么删除操作将可能失败。
例如,在上述示例数据中,item.item_id 的值如 "50"、"49" 都是字符串类型。如果 item_id_to_delete 是一个数字类型(例如 50),那么 50 !== "50" 的结果将是 true,因为 !== 会同时比较值和类型。这意味着即使值相同,但类型不同,该项也不会被过滤掉,从而导致删除失败。
解决方案
解决这个问题主要有两种方法:
方案一:使用非严格相等运算符 !=
非严格相等运算符 != 在比较时会尝试进行类型转换。这意味着 50 != "50" 的结果是 false,因为 J*aScript 会将字符串 "50" 转换为数字 50 再进行比较。
修改 Deleteitem 函数中的比较逻辑如下:
云网OA
采用JSP开发的办公自动化产品、基于B/S结构,运行环境:JDK v1.5、Tomcat v5.5、MySQL v4.1,三者均为以上版本其他相关内容:可视化流程设计: 流程支持串签、会签和分支流程,可以设置流程节点的修改、删除权限,并可指定流程中各个用户在表单中可以填写的域。智能表单所见即所得设计: 智能设计,自动在数据库中生成表格,方便优化程序 公共交流: 集论坛、博客、聊天室于一体文件柜:C
0
查看详情
function Deleteitem(emp_id, item_id_to_delete) {
var itemDetails = localStorage.getItem(emp_id);
if (itemDetails) {
i
temDetails = JSON.parse(itemDetails);
itemDetails = itemDetails.filter(function(item) {
// 使用非严格不相等运算符
return item.item_id != item_id_to_delete;
});
localStorage.setItem(emp_id, JSON.stringify(itemDetails));
}
displayItemDetails();
}注意事项: 这种方法简单直接,但在某些情况下,非严格相等可能会导致一些意料之外的类型转换行为,例如 0 == false 会返回 true。因此,虽然它能解决当前问题,但并非总是最推荐的方案,尤其是在需要精确控制类型匹配的场景。
方案二:显式进行类型转换(推荐)
更健壮和推荐的做法是,在进行比较之前,显式地将其中一个操作数转换为与另一个操作数相同的类型。这样可以避免 != 运算符可能带来的隐式类型转换问题,使代码更具可读性和可预测性。
通常,我们会将外部传入的 item_id_to_delete 转换为与 localStorage 中存储的 item.item_id 相同的类型。根据示例数据,item.item_id 是字符串,因此我们将 item_id_to_delete 也转换为字符串。
function Deleteitem(emp_id, item_id_to_delete) {
var itemDetails = localStorage.getItem(emp_id);
if (itemDetails) {
itemDetails = JSON.parse(itemDetails);
// 将 item_id_to_delete 显式转换为字符串类型
const target_item_id_str = String(item_id_to_delete);
itemDetails = itemDetails.filter(function(item) {
// 使用严格不相等运算符进行比较,确保类型一致
return item.item_id !== target_item_id_str;
});
localStorage.setItem(emp_id, JSON.stringify(itemDetails));
}
displayItemDetails();
}反之,如果 localStorage 中的 item.item_id 存储的是数字类型(例如 50),而传入的 item_id_to_delete 可能是字符串(例如 "50"),则应该将 item.item_id 或 item_id_to_delete 转换为数字进行比较:
// 假设 item.item_id 在 localStorage 中是数字类型
// itemDetails = itemDetails.filter(function(item) {
// return Number(item.item_id) !== Number(item_id_to_delete);
// });最佳实践: 保持数据类型的一致性是减少这类错误的关键。在将数据存入 localStorage 之前,就应该确保其格式符合预期。例如,如果 item_id 总是数字,那么在存储前就应该将其转换为数字,或者在从 localStorage 读取后立即进行类型转换。
总结
在从 localStorage 中存储的数组对象中删除特定项目时,务必注意比较操作中数据类型的一致性。使用严格相等运算符 !== 进行比较时,如果操作数的类型不匹配,即使值相同,比较结果也会是 true,从而导致删除失败。
推荐的做法是,在比较之前显式地将操作数转换为相同的类型(例如,都转换为字符串或都转换为数字),然后再使用严格相等或不相等运算符进行比较。这样可以提高代码的健壮性、可读性和可维护性,避免因隐式类型转换带来的潜在问题。
以上就是从 localStorage 中删除数组中指定项的教程的详细内容,更多请关注其它相关文章!
# 数据结构
# 产品类网站建设方案
# 营销推广哪家比较好点呢
# seo教程网app
# 如何做营销推广易速达
# 网站按词优化怎么写
# 泰兴推广网站
# 烟台芝罘关键词排名工具
# seo流量 sem流量全称
# 手机网站建设基础
# 嘉兴网站建设价位表报价
# 不相等
# 云网
# 都是
# javascript
# 如何使用
# 隐式
# 是一个
# 组中
# 运算符
# 转换为
# 隐式类型转换
# 常见问题
# ai
# json
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
蛙漫2台版漫画地址 Manwa2正版网页版链接
实现分段式页面滚动导航:CSS与J*aScript教程
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
顺丰快递查询系统 官方正版查询入口
Tabulator表格中精确实现日期时间排序的指南
微信客户端如何收红包_微信客户端接收红包使用教程
SteamMachine定价或为699美元 大家想入手吗?
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
c++ dfs和bfs代码 c++深度广度优先搜索算法
在哪找SublimeJ远程工具_SFTP插件配置教程
Python多版本共存与虚拟环境管理深度指南
fishbowl官网免费版 fishbowl养鱼网站入口
邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
J*aScript中安全有效地处理localStorage字符串数据
J*aScript:在map操作中高效处理空数组
必由学网页版入口 必由学官方平台直接访问
yy漫画网页版官方入口_yy漫画官网登录页面链接
利用Bokeh CustomJS动态控制DataTable列可见性
Win10双系统截图高效法 截屏快捷键速记【技巧】
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
Python自定义类排序:解决lambda键值访问TypeError的实践指南
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案
免费抖音短视频入口_抖音网页版短视频免费通道
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
4399免费游戏网址入口 4399小游戏免费入口点开即玩
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
Log4j Console Appender性能瓶颈与高并发优化策略
AO3最新入口2025公告_AO3中文官网合集
2026春节假期票务安排_2026春节放假购票指南
零跑汽车11月交付量达70327台 实现连续9个月正增长
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
美团外卖商家服务中心入口 美团商家版官网入口
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
最新韩小圈网页版登录入口_官网在线观看官方链接
Fabric模组开发:自定义物品与物品组的现代管理方法
Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析


2025-11-25
浏览次数:次
返回列表
temDetails = JSON.parse(itemDetails);
itemDetails = itemDetails.filter(function(item) {
// 使用非严格不相等运算符
return item.item_id != item_id_to_delete;
});
localStorage.setItem(emp_id, JSON.stringify(itemDetails));
}
displayItemDetails();
}