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


从 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 函数中的比较逻辑如下:

乾坤圈新媒体矩阵管家 乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

乾坤圈新媒体矩阵管家 219 查看详情 乾坤圈新媒体矩阵管家
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();
}

注意事项: 这种方法简单直接,但在某些情况下,非严格相等可能会导致一些意料之外的类型转换行为,例如 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 中删除数组中指定项的教程的详细内容,更多请关注其它相关文章!


# java  # js  # json  # ai  # 常见问题  # javascript  # 网络营销推广v新hfqjwl刷词  # 武汉网站制作推广公司  # 抖音营销平台推广  # 设计 效果图网站推广  # 十堰网络营销推广策略  # 惠州seo推广投放  # 忻州网站建设策划内容  # 网站推广手段包括哪些  # 沈阳网站建设价格大全  # 深圳led网站建设  # 将其  # 两种  # 不相等  # 都是  # 隐式  # 是一个  # 组中  # 数据结构  # 运算符  # 转换为  # 隐式类型转换 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 快递查询,一键速查  使用AI在VS Code中将代码从一种语言翻译成另一种  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  mysql如何配置从库只读_mysql从库只读设置方法  猫眼电影app如何设置电影上映提醒_猫眼电影上映提醒设置教程  J*aScript桌面应用_Electron多进程架构实战  申通快递物流信息查询 申通快递包裹状态追踪  mysql怎么查询数据_mysql基础查询语句使用教程  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  《偃武》甘宁技能详解  《友玩*》创建群聊方法  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  口腔诊所管理软件推荐  《万兴喵影》导出视频方法  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  Go App Engine 项目结构与包管理深度指南  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  windows10怎么开启wsl_windows10安装linux子系统教程  FullCalendar自定义按钮样式定制指南  sublime text 4如何安装_最新版sublime下载与汉化教程  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  《海豚家》注销账号方法  AO3中文版手机快速通道_AO3最新稳定链接更新  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  《深林》冬季章节图文攻略  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  企查查官网和爱企查 企查查企业查询官网入口  苹果如何下载nanobanana  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  如何使用CSS Grid实现“大方块左侧,小方块右侧垂直堆叠”的水平布局  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  如何查找哪个composer包引入了特定的依赖?  PHP utf8_encode 字符编码转换陷阱与解决方案  《华夏千秋》龙女试炼功法获取方法  《领英》查看屏蔽名单方法  《火花chat》搜索好友方法  风车动漫官网首页入口登录 风车动漫在线观看正版地址  FotoBalloon图片左右镜像教程  睡觉时心跳快是什么原因 夜间心悸如何应对  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?  WooCommerce 新客户订单自动添加管理员备注教程  济南公交卡手机充值指南  大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日  ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程  《杖剑传说》食谱大全 

 2025-11-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.