Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
使用 JavaScript 比较两个 JSON 数组并提取差异_创想鸟

使用 JavaScript 比较两个 JSON 数组并提取差异

使用 javascript 比较两个 json 数组并提取差异

本文介绍了如何使用 JavaScript 比较两个 JSON 数组,并提取出第一个数组中存在,但第二个数组中不存在,且满足特定条件的元素。通过使用 Set 数据结构和数组的 map 方法,可以高效地实现此功能,并最终获得包含所需元素 ID 和名称的新数组。

比较两个 JSON 数组并提取差异

在 JavaScript 中,经常需要比较两个 JSON 数组,并根据特定条件提取出差异数据。例如,我们有两个数组 fruits 和 food,目标是从 fruits 中找出那些 name 不存在于 food 数组的 food_name 中,并且 food 数组中对应 food_name 的 deleted 字段不等于 “1” 的元素。

示例数据

立即学习“Java免费学习笔记(深入)”;

首先,定义两个示例数组:

const fruits = [  { id: '1', name: 'Apple' },  { id: '2', name: 'Orange' },  { id: '3', name: 'Cherry' }];const food = [  { id: '1', food_name: 'Orange', deleted: "0" },  { id: '2', food_name: 'Bread', deleted: "0" },  { id: '3', food_name: 'Cheese', deleted: "0" },  { id: '4', food_name: 'Apple', deleted: "1" },  { id: '5', food_name: 'Salt', deleted: "0" }];

实现步骤

创建 food_name 的集合 (Set)

为了提高查找效率,首先从 food 数组中提取出所有的 food_name,并将其存储在一个 Set 数据结构中。Set 提供了快速的 has() 方法,用于检查某个值是否存在。

var foodSet = new Set(food.map(item => item.food_name));

这里,food.map(item => item.food_name) 将 food 数组转换为一个包含所有 food_name 的新数组,然后使用 new Set() 创建一个 foodSet。

遍历 fruits 数组并进行比较

接下来,遍历 fruits 数组,对于每个水果,检查其 name 是否存在于 foodSet 中,并且检查 food 数组中是否存在对应 food_name 且 deleted 不等于 “1” 的元素。

var dep_data = [];for (var j = 0; j  item.food_name === fruits[j].name);    if (!foodItem || foodItem.deleted !== "1") {      dep_data.push({ id: fruits[j].id, name: fruits[j].name });    }  }}console.log(dep_data);

!foodSet.has(fruits[j].name) 检查 fruits[j].name 是否不存在于 foodSet 中。food.find(item => item.food_name === fruits[j].name) 查找 food 数组中是否存在 food_name 等于 fruits[j].name 的元素。!foodItem || foodItem.deleted !== “1” 检查 foodItem 是否不存在(即 food 数组中没有找到对应的 food_name),或者 foodItem 存在但其 deleted 字段不等于 “1”。如果以上条件都满足,则将 fruits[j] 的 id 和 name 添加到 dep_data 数组中。

完整代码

const fruits = [  { id: '1', name: 'Apple' },  { id: '2', name: 'Orange' },  { id: '3', name: 'Cherry' }];const food = [  { id: '1', food_name: 'Orange', deleted: "0" },  { id: '2', food_name: 'Bread', deleted: "0" },  { id: '3', food_name: 'Cheese', deleted: "0" },  { id: '4', food_name: 'Apple', deleted: "1" },  { id: '5', food_name: 'Salt', deleted: "0" }];var dep_data = [];var foodSet = new Set(food.map(item => item.food_name));for (var j = 0; j  item.food_name === fruits[j].name);    if (!foodItem || foodItem.deleted !== "1") {      dep_data.push({ id: fruits[j].id, name: fruits[j].name });    }  }}console.log(dep_data);

输出结果

运行以上代码,将会得到以下结果:

[  { "id": "3", "name": "Cherry" }]

总结

通过使用 Set 数据结构和数组的 map 和 find 方法,可以高效地比较两个 JSON 数组,并根据特定条件提取出差异数据。这种方法避免了嵌套循环,提高了代码的执行效率。在实际应用中,可以根据具体的需求调整比较条件和提取的数据。请注意,该代码假定 food 数组中的 deleted 字段为字符串类型。如果它是数字类型,则需要相应地调整比较逻辑。

以上就是使用 JavaScript 比较两个 JSON 数组并提取差异的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1512527.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
javascript闭包怎样实现中间件流程
上一篇 2025年12月20日 07:10:55
ReactJS 中用于验证包含空格、破折号、句点和撇号的文本的正则表达式
下一篇 2025年12月20日 07:11:17

相关推荐

  • Android游戏开发:基于线段交点的精确碰撞检测

    Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测Android游戏开发:基于线段交点的精确碰撞检测

    本教程详细讲解了如何在Android Pong游戏中实现精确的线段交点检测与碰撞处理。通过将球的运动轨迹和挡板视为线段,并利用代数方程计算它们的交点,可以准确判断碰撞发生的位置。文章提供了具体的数学原理、Java实现代码以及在游戏开发中的应用注意事项,帮助开发者优化游戏物理反馈。 在android等…

    2026年9月28日 • 用户投稿
    100
  • Win10系统无法更新设备驱动更新被禁用

    Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用Win10系统无法更新设备驱动更新被禁用

    windows 10 系统默认会自动更新系统和驱动程序,但有些用户可能会遇到驱动更新被禁用的情况。如果 win10 设备驱动更新被禁用了,该如何解决呢?接下来,小编将为大家详细介绍具体的操作步骤,希望能帮到有需要的朋友们。 Win10 系统无法更新设备驱动更新被禁用怎么办: 首先,按下 Win+R …

    2026年9月28日 • 用户投稿
    000
  • MySQL 实现点餐系统的订单管理功能

    MySQL 实现点餐系统的订单管理功能MySQL 实现点餐系统的订单管理功能MySQL 实现点餐系统的订单管理功能MySQL 实现点餐系统的订单管理功能

    MySQL 实现点餐系统的订单管理功能在餐饮行业,点餐系统已经成为了不可或缺的一部分。它提供了方便快捷的点餐方式,大大提升了顾客用餐的便利性。而订单管理,作为点餐系统的关键功能之一,具备了查询、新增、修改和删除等基本操作的必要性。本文将介绍如何使用MySQL实现点餐系统的订单管理功能,并提供具体的代…

    2026年9月28日 • 用户投稿
    000
  • sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南

    sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南sublime怎么在侧边栏显示git状态_Sublime侧边栏Git状态显示配置指南

    要实现Sublime Text侧边栏显示Git状态,需安装GitGutter插件。首先通过Package Control安装GitGutter,重启编辑器后即可在侧边栏文件名旁看到Git状态图标,如“M”表示修改,“A”表示新增,“?”表示未跟踪;同时行号区会显示增删改的彩色标记。该插件基于社区驱动…

    2026年9月28日 • 用户投稿
    000
  • Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程

    Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程Safari浏览器地址栏在下面怎么改回上面_Safari浏览器地址栏位置布局调整教程

    首先检查Safari标签栏位置设置,1、打开设置进入Safari选项,2、将标签栏位置改为顶部;若无效,3、重启Safari浏览器;4、排查辅助功能中的便捷访问是否开启并关闭;最后更新iOS系统至最新版本以修复显示异常。 如果您发现Safari浏览器的地址栏显示在屏幕底部而非顶部,可能是由于设备界面…

    2026年9月28日 • 用户投稿
    000
  • Linux Gem知多少?带你探索Linux Gem的奥秘

    Linux Gem知多少?带你探索Linux Gem的奥秘Linux Gem知多少?带你探索Linux Gem的奥秘Linux Gem知多少?带你探索Linux Gem的奥秘Linux Gem知多少?带你探索Linux Gem的奥秘

    《Linux Gem知多少?带你探索Linux Gem的奥秘》 Linux作为一款十分强大的操作系统,拥有众多令人惊叹的功能和特性。在Linux系统中,有许多“宝石”般闪耀的工具和功能,被人们称之为“Linux Gem”。这些Linux Gem不仅能够提供高效的工作环境,还能让我们的使用体验更加便捷…

    2026年9月28日 • 用户投稿
    000
  • 快手小店怎么看卖出去的商品?快手小店怎么查看出售的商品

    快手小店怎么看卖出去的商品?快手小店怎么查看出售的商品快手小店怎么看卖出去的商品?快手小店怎么查看出售的商品快手小店怎么看卖出去的商品?快手小店怎么查看出售的商品快手小店怎么看卖出去的商品?快手小店怎么查看出售的商品

    在电商蓬勃发展的今天,快手小店为众多商家提供了一个展示商品、实现变现的重要渠道。那么,快手小店怎么看卖出去的商品?接下来,我将详细为你介绍查看已售商品的具体操作流程。 快手小店查看已售商品的两种方式 想要掌握店铺销售情况,主要可以通过两个途径来查看:订单管理页面 和 商品详情页。 1. 通过订单管理…

    2026年9月28日 • 用户投稿
    200
  • 番茄ToDo计时过程中可以切换应用吗_番茄ToDo应用切换限制说明

    番茄ToDo计时过程中可以切换应用吗_番茄ToDo应用切换限制说明番茄ToDo计时过程中可以切换应用吗_番茄ToDo应用切换限制说明番茄ToDo计时过程中可以切换应用吗_番茄ToDo应用切换限制说明番茄ToDo计时过程中可以切换应用吗_番茄ToDo应用切换限制说明

    开启严格模式和强制锁机功能可防止切换应用。首先进入【我的】→【学霸模式】开启严格模式,再通过【其他设置】→【提升强制性】启用禁止桌面和多任务开关,最后在系统设置中为番茄ToDo授予后台运行及悬浮窗权限,确保限制生效。 如果您在使用番茄ToDo进行专注计时时,希望避免自己切换到其他应用而分心,可以启用…

    2026年9月28日 • 用户投稿
    200
  • 如何解决MySQL安装时权限不足的处理方法?

    如何解决MySQL安装时权限不足的处理方法?如何解决MySQL安装时权限不足的处理方法?如何解决MySQL安装时权限不足的处理方法?如何解决MySQL安装时权限不足的处理方法?

    mysql安装时权限不足问题可通过以下方法解决:1.使用管理员权限运行安装程序;2.检查并修改安装目录权限;3.关闭uac;4.修改mysql配置文件指定用户目录;5.检查防火墙和杀毒软件;6.查看安装日志定位问题;7.手动创建数据目录并设置权限;8.考虑使用docker。 MySQL安装时权限不足…

    2026年9月28日 • 用户投稿
    000
  • Linux Deploy是什么?详细解释与使用指南

    Linux Deploy是什么?详细解释与使用指南Linux Deploy是什么?详细解释与使用指南Linux Deploy是什么?详细解释与使用指南Linux Deploy是什么?详细解释与使用指南

    标题:Linux Deploy:一体化部署解决方案 Linux Deploy是一个强大的开源工具,旨在简化Linux虚拟化和云计算方面的操作。它允许用户在手机或平板电脑上创建和管理Linux系统,并支持多种Linux发行版,如Ubuntu、Debian、Arch Linux等。本文将详细介绍Linu…

    2026年9月28日 • 用户投稿
    100
  • SublimeText如何管理多个项目窗口_Workspace工作区使用方法

    SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法

    Sublime Text通过项目文件(.sublime-project)和工作区文件(.sublime-workspace)实现多项目高效管理,前者保存共享的静态配置如文件夹结构和构建系统,建议提交至版本控制;后者记录个人动态状态如打开文件、光标位置和布局,应被忽略以避免冲突。使用“快速切换项目”功…

    2026年9月28日 • 用户投稿
    100
  • Java中List of Lists按指定列排序与查找教程

    Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程

    本教程详细介绍了如何在Java中处理List<List>数据结构,以实现按指定“列”进行排序,并在此基础上高效查找包含特定值的“行”。文章通过自定义Comparator来对行数据进行比较和排序,并提供了识别目标列索引的策略,从而解决了在复杂嵌套列表中进行数据组织和检索的常见挑战。 1. …

    2026年9月28日 • 用户投稿
    100
  • 豆包AI安装后如何配置TPU加速 豆包AI张量处理器优化方案

    本文将详细介绍在豆包AI环境中,如何配置张量处理器(TPU)以实现加速优化。我们将从理解TPU的基本原理开始,逐步讲解安装驱动、设置环境以及验证加速效果的整个过程,旨在帮助用户高效地利用TPU提升豆包AI模型的训练和推理性能。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 D…

    2026年9月28日
    200
  • 微博怎么举报用户_微博用户举报操作方法

    微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法

    可通过用户主页、单条微博或私信三种方式举报违规行为。进入主页点击“更多”选择举报,或在微博详情页点击“更多”举报内容,私信中长按消息气泡亦可发起举报,需选择类别并提交证据,系统将审核处理。 如果您在微博上遇到骚扰、虚假信息或不当言论的用户,可以通过平台提供的举报功能进行反馈,以维护网络环境的健康有序…

    2026年9月28日 • 用户投稿
    000
  • Linux学习笔记(二)系统基础操作

    Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作

    Linux基础学习笔记精选专栏 本专栏由小雨ttt创建,致力于分享学习linux基础知识的过程。本专栏不是机械地介绍linux指令集,而是包含了作者亲自实践的操作过程,站在一个初学者的角度理解linux基础知识。 目前本专栏包含的内容有: Linux学习笔记(一)使用文本编辑器VimLinux学习笔…

    2026年9月28日 • 用户投稿
    000
  • 华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)

    华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)

    华为手机作为一款在全球范围内广受欢迎的手机品牌,其稳定性和性能备受用户青睐。然而,有时我们会遇到一些问题,需要进入手机的维修模式来解决。本文将详细介绍如何通过一键操作进入华为手机的维修模式,帮助用户快速解决手机问题。 盘古大模型 华为云推出的一系列高性能人工智能大模型 35 查看详情 段落1.确保你…

    2026年9月28日 • 用户投稿
    000
  • 快手真宝仓怎么绑?快手平台的真宝仓

    快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓

    随着短视频平台的兴起,快手已成为众多用户钟爱的社交平台之一。其中,真宝仓作为快手电商为特定类目(如珠宝玉石)打造的官方仓储物流服务,备受商家关注。不少新入驻的商家对于如何接入真宝仓感到困惑。别急,今天就来为大家详细讲解一下快手真宝仓的接入方法,让你轻松上手! 一、什么是快手真宝仓? 快手真宝仓是快手…

    2026年9月28日 • 用户投稿
    200
  • 博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”

    博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”

    日前,cnmo 注意到,有数码博主发文称,小米 civi 系列的涨价已成定局。此前小米 13/14 系列的成功冲高,为小米品牌溢价打下了坚实的基础。自小米 14 ultra 问世以来,小米品牌溢价的现象愈发明显,civi 系列自然也会跟随这一趋势。但值得注意的是,小米并不会利用品牌溢价去削减产品质量…

    2026年9月28日 • 用户投稿
    000
  • 360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案

    360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案

    首先优化内存与缓存设置,启用自动释放内存和清理缓存功能;其次使用浏览器内置的一键修复工具扫描并修复异常;若问题依旧,建议卸载后重新安装最新版浏览器;最后可借助360安全卫士等第三方工具进行系统级修复,排除插件冲突或组件损坏问题。 如果您在使用360极速浏览器时遇到“喔唷,崩溃啦”的提示,这通常意味着…

    2026年9月28日 • 用户投稿
    300
  • sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    安装插件并配置可实现Sublime Text保存时自动格式化代码,提升代码可读性与一致性。首先安装Package Control包管理器,通过控制台执行指定代码完成安装;重启后使用命令面板(Ctrl+Shift+P)调出Package Control: Install Package,搜索并安装所需…

    2026年9月28日 • 用户投稿
    700

发表回复

登录后才能评论
关注微信