非常实用的5种json数组去重方法,函数实现思路竟是chatgpt帮我写的!

文章目录

  • 人工智能福利文章
  • 方法一 reduce
    • 实现思路
  • 方法二 filter和Map
    • 实现思路
  • 方法三 变异for
    • 实现思路
  • 方法四 for + filter
    • 实现思路
  • 方法五 for
    • 实现思路
  • 写在最后

在这里插入图片描述

人工智能福利文章

  • 【分享几个国内免费可用的ChatGPT镜像】
  • 【10几个类ChatGPT国内AI大模型】
  • 【用《文心一言》1分钟写一篇博客简直yyds】
  • 【用讯飞星火大模型1分钟写一个精美的PPT】

在日常开发中,我们经常会遇到需要去重json数组中重复的数据的场景。json数组去重有很多种方法,比如:双重for循环去重、利用对象属性名不冲突去重,今天我们介绍几个json数组去重的方法。希望能够帮助到大家。

让我们来看看chatgpt跟进封装的函数写出的具体实现思路吧,大家看看是否逻辑清晰,是否一目了然。

方法一 reduce

实现思路

  1. 判断传入的jsonArr是否符合去重的条件,即长度大于等于2,指定了去重字段,且第一个元素是JSON格式数据;
  2. 如果不符合条件,则直接返回原始数组jsonArr;
  3. 如果符合条件,则利用reduce方法遍历jsonArr,对每个元素进行处理,将其与all中的元素进行比较,如果有元素的指定去重字段与next相同,则返回all,否则将next加入到all中;
  4. 返回去重后的数组uniqueArr。
/** json数组去重* @param: {Array} jsonArr 去重之前的数组* @param  {String} field  需要去重的字段值* @return {Array}        去重之后的数组*/
export function uniqueJsonArrByField(jsonArr, field) {// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;const uniqueArr = jsonArr.reduce((all, next) => all.some((item) => item[field] == next[field]) ? all : [...all, next], []);return uniqueArr;
}

方法二 filter和Map

实现思路

  1. 判断传入的 jsonArr 是否符合去重的条件,即长度大于等于2,指定了去重字段,且第一个元素是 JSON 格式数据;
  2. 如果不符合条件,则直接返回原始数组 jsonArr;
  3. 如果符合条件,则创建一个空的 Map 对象 res;
  4. 利用数组的 filter() 方法遍历 jsonArr 数组,对每个元素进行处理:
  • 判断当前元素的指定去重字段值是否已经存在于 res 中,如果已经存在,则说明该元素重复,直接过滤掉;
  • 如果该元素的指定去重字段值不存在于 res 中,则将其加入到 res 中,并返回 true;
    5.将过滤后的数组作为返回值返回。
/*** json数组去重* @param  {Array} jsonArr 去重之前的数组* @param  {String} field  需要去重的字段值* @return {Array}        去重之后的数组*/
export function uniqueJsonArrByField(jsonArr, field) {// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;const res = new Map(); // 标识对象const uniqueArr = jsonArr.filter((item) => !res.has(item[field]) && res.set(item[field], true));return uniqueArr;
}

方法三 变异for

实现思路

  1. 判断传入的 jsonArr 是否符合去重的条件,即长度大于等于2,指定了去重字段,且第一个元素是 JSON 格式数据;
  2. 如果不符合条件,则直接返回原始数组 jsonArr;
  3. 如果符合条件,则创建一个空对象 obj;
  4. 创建一个空数组 uniqueArr;
  5. 利用 for 循环遍历 jsonArr 数组,对每个元素进行处理:
  • 判断当前元素的指定去重字段值是否已经存在于 obj 中,如果已经存在,则说明该元素重复,直接跳过;
  • 如果该元素的指定去重字段值不存在于 obj 中,则将其加入到 uniqueArr 中,并在 obj 中记录该值;
  1. 将去重后的数组作为返回值返回。
/*** json数组去重* @param  {Array} jsonArr 去重之前的数组* @param  {String} field  需要去重的字段值* @return {Array}        去重之后的数组*/
export function uniqueJsonArrByField(jsonArr, field) {// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;let obj = {}; // 标识对象let uniqueArr = [];for(let i = 0; i<jsonArr.length; i++) { if(!obj[jsonArr[i][field]]){ uniqueArr.push(jsonArr[i]);obj[jsonArr[i][field]] = true;} }return uniqueArr;
}

方法四 for + filter

实现思路

  1. 判断传入的 jsonArr 是否符合去重的条件,即长度大于等于2,指定了去重字段,且第一个元素是 JSON 格式数据;
  2. 如果不符合条件,则直接返回原始数组 jsonArr;
  3. 如果符合条件,则创建一个空数组 uniqueArr,并将 jsonArr 中的第一个元素加入到 uniqueArr 中;
  4. 利用 for 循环遍历 jsonArr 数组,对每个元素进行处理:
  • 用 filter() 方法过滤 uniqueArr 中的元素,查找是否存在指定去重字段值与当前元素相同的元素;
  • 如果存在,则说明该元素重复,直接跳过;
  • 如果不存在,则将该元素加入到 uniqueArr 中;
  1. 将去重后的数组作为返回值返回。
/*** json数组去重* @param  {Array} jsonArr 去重之前的数组* @param  {String} field  需要去重的字段值* @return {Array}        去重之后的数组*/
export function uniqueJsonArrByField(jsonArr, field) {// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;let uniqueArr = [jsonArr[0]];for (let i = 1; i < jsonArr.length; i++) {let item = jsonArr[i];let filterData = uniqueArr.filter(function (f_item) {return item[field] && f_item[field] == item[field];});if (filterData.length == 0) { // 如果uniqueArr中不存在itemuniqueArr.push(item);}}return uniqueArr;
}

方法五 for

实现思路

  1. 判断传入的 jsonArr 是否符合去重的条件,即长度大于等于2,指定了去重字段,且第一个元素是 JSON 格式数据;
  2. 如果不符合条件,则直接返回原始数组 jsonArr;
  3. 如果符合条件,则创建一个空数组 uniqueArr,并将 jsonArr 中的第一个元素加入到 uniqueArr 中;
  4. 利用 for 循环遍历 jsonArr 数组,对每个元素进行处理:
  • 创建一个布尔类型的变量 repeat 作为标识位,初始值为 false;
  • 再用一个 for 循环遍历 uniqueArr 数组,对于每个元素都检查它们的指定去重字段值是否与当前元素的指定去重字段值相同;
  • 如果存在,则说明该元素重复,将标识位设为 true 并跳出循环;
  • 如果不存在,则将该元素加入到 uniqueArr 中;
  1. 将去重后的数组作为返回值返回。
/** json数组去重* @param: {Array} jsonArr 去重之前的数组* @param  {String} field  需要去重的字段值* @return {Array}        去重之后的数组*/
export function uniqueJsonArrByField(jsonArr, field) {// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;let uniqueArr = [jsonArr[0]];for (let i = 1; i < jsonArr.length; i++) {let item = jsonArr[i];let repeat = false; // 标识位for (let j = 0; j < uniqueArr.length; j++) {if (item[field] && item[field] == uniqueArr[j][field]) {repeat = true;break;}}if (!repeat) {uniqueArr.push(item);}}return uniqueArr;
}

大家觉得chatgpt根据函数写出的实现思路准确吗?欢迎留言讨论。

写在最后

✨ 原创不易,希望各位大佬多多支持。

👍 点赞,你的认可是我创作的动力。

⭐️ 收藏,感谢你对本文的喜欢。

✏️ 评论,你的反馈是我进步的财富。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI自动播——AI虚拟主播帮你实现24小时直播带货技术分享

如今很多淘宝天猫商家会在做直播的时候&#xff0c;会遇到真人主播难招或者真人主播直播时长有限&#xff0c;那么有什么办法解决这个难题呢&#xff0c;这个时候就可以用AI自动播了&#xff0c;也就是AI虚拟主播直播带货。具体怎么操作呢&#xff1f;下面一起来看看吧。 AI自动…

亚马逊账号被关联能申诉得回来吗

关于亚马逊账号被关联能申诉回来吗&#xff1f;小编有话要说。 其实小编是一个特别谨慎的人&#xff0c;在初入亚马逊之前&#xff0c;会了解到亚马逊所有的问题之后&#xff0c;才会注册账号。那么要了解的有什么呢&#xff1f;注册需要的信息&#xff0c;注册的规则&#xf…

社区1月热门文章、ChatGPT工具汇总,强化学习安全和隐私、斯坦福大学CS234《智源社区强化学习周刊》第75期...

No.75 智源社区 强化学习组 强 化 学 习 研究 观点 资源 活动 社区热门文章 Google发布Bard与ChatGPT竞争 https://hub.baai.ac.cn/view/23925 纽约时报&#xff1a;ChatGPT诞生背后的故事 https://hub.baai.ac.cn/view/23835 ChatGPT提示与AI工具、开发工具、低代码工具汇总 《…

5款超实用的免费AI工具,让你轻松提升工作效率!

目录 1、AiChat 产品特点 任意选择内置角色对话 自定义AI角色进行对话 推荐理由&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 2、MINISTER AI 产品特点 集成ChatGPT聊天 简化Stable Diffusion 集成Midjourney模式 训练并分享模型 推荐理由&a…

13 款炫酷的 MySQL 可视化管理工具!好用到爆!!

MySQL 的管理维护工具非常多&#xff0c;除了系统自带的命令行管理工具之外&#xff0c;还有许多其他的图形化管理工具&#xff0c;工具好用是一方面&#xff0c;个人的使用习惯也很重要&#xff0c;这里介绍 13 款 MySQL 图形化管理工具&#xff0c;供大家参考。 1、DBeaver D…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

查看原文>>>GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用 目录 第一章、理论基础 第二章、开发环境搭建 第三章、遥感大数据处理基础与ChatGPT等AI模型交互 第四章、典型案例操作实践 第五章、输入输出及数据资产高效管理 第…

【IC基础】集成电路设计领域术语缩写及名词解释(字母索引版)

前言&#xff1a; 笔者在大三上学习学习《SoC设计导论》时整理的有关集成电路设计领域的常见有英文缩写和对应的名词解释&#xff0c;文中标注的页码均出自《SoC设计方法与实现》这本参考书&#xff1a; 目录 目录 前言&#xff1a; 目录 A B C CTG(Clock Tree Generat…

浏览器扩展合集来啦!实用而有趣的浏览器扩展插件!

五彩&#xff1a;网页划线、批注、高亮工具 五彩严格意义上的同类产品是 Hypothesis、diigo 等工具&#xff0c;Cubox、Readwise、简悦则属于需要先解析一下网页后高亮的插件。 此前我已经在用 Cubox 了&#xff0c;为什么还需要五彩来完成网页高亮&#xff1f; Cubox 在移动…

GPT模型结合Python-GEE遥感云大数据分析、管理与可视化技术

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用 随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c…

分享6个AI绘画网站

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 1、Midjourney 特点&#xff1a;业内标杆&#xff0c;效果最强大 Midjourney是基于diffusion的AI图画艺术生成器。生成图片不局…

又又又发现了一个 AI 插件神器 TeamSmart

简介 TeamSmart AI 是最近比较火的 Chrome 插件&#xff0c;它是基于 ChatGPT 集成的 AI 助手团队工具 对&#xff0c;没错&#xff0c;是一个团队。这个团队里面有许多不同角色的成员&#xff0c;每隔成员都有自己的专业领域&#xff0c;比如商业、市场营销、灵魂写手、程序…

忘记了谷歌Gmail账号名怎么办?用这种方法轻松找回谷歌邮箱地址

有些朋友以前注册过谷歌邮箱&#xff0c;但很久很久没有再去使用。 现在注册ChatGPT需要谷歌邮箱&#xff0c;于是打算把尘封已久的谷歌邮箱找出来&#xff0c;可是这时候你才发现&#xff0c;谷歌邮箱的账号名早已忘掉了。 今天重点来说说如何找回谷歌账号&#xff0c;希望能够…

忘记Gmail谷歌账号密码或者密码错误怎么办?用这种方法轻松搞定

有些朋友以前注册过谷歌邮箱&#xff0c;但很久很久没有再去使用。现在注册ChatGPT需要谷歌邮箱&#xff0c;于是打算把尘封已久的谷歌邮箱找出来&#xff0c;可是这时候你突然发现&#xff0c;谷歌邮箱的密码忘了。 今天重点来说说如何找回谷歌账号的密码&#xff0c;希望能够…

HTML知识点大合集

如标题所示哈&#xff0c;最近无聊&#xff0c;花了几十分钟整理一下之前HTML学过的知识点&#xff0c;写下了这个大合集&#xff0c;能力有限可能还有所不足&#xff0c;不过用来巩固基础&#xff0c;学习是够用的。 HTML知识点合集 一.介绍二.开发工具推荐三.代码实战学习3.1…

史上最详细的使用Claude和接入Claude-api教程

是什么&#xff08;What&#xff09; Claude 是最近新开放的一款 AI 聊天机器人&#xff0c;是世界上最大的语言模型之一&#xff0c;比之前的一些模型如 GPT-3 要强大得多&#xff0c;因此 Claude 被认为是 ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研…

BFT 最前线 | ChatGPT登顶App Store;国产中文大语言模型「天河天元」发布;华为招募天才少年;阿里分拆上市

原创 | 文 BFT机器人 AI视界 TECHNOLOGY NEWS 01 ChatGPT上架App Store登顶榜首 OpenAI&#xff1a;很快也将出现在安卓上 近日&#xff0c;ChatGPT正式发布App版本&#xff0c;上架APP Store&#xff0c;支持iPhone和iPad设备。OpenAI表示&#xff0c;ChatGPT iOS APP可免费…

对ChatGPT、阿尔法零等人工智能开发的简评与展望

1.ChatGPT的出现再次说明&#xff0c;基于人工神经网络等技术所进行的模拟的确可以比较好的模拟人脑的思维学习过程和思维结构&#xff0c;虽然其在总体上可以算是一个黑箱或灰箱模型&#xff0c;但是从目前的表现来看&#xff0c;有许多方面都与人脑的表现非常相似&#xff1a…

国产大模型狂飙,谁能率先做出第一个中国版GPT

热火烹油的大模型赛道打起了“嘴仗”。 搜狗前CEO王小川评价百度创始人李彦宏的采访发言称&#xff1a;“你们采访的可能是平行世界的他&#xff0c;不是我们这个世界里的。” 而针对王小川的评论&#xff0c;百度集团副总裁、搜索平台负责人肖阳又回应道&#xff1a;“王小…

知圈专栏 | 人工智能的“智能”是什么?— 智能的原理(上)

来源&#xff1a;知社学术圈 编者按&#xff1a; 在全民皆可成为信息源的今天&#xff0c;科学的推广和触达有了更容易的途径&#xff0c;但碎片化令思考停留于浅表也是不可忽略的负面效应。在知社的读者群里&#xff0c;不乏有常规科研人员之外的严肃思考者和孜孜求索者&#…

WAIC2023会后记

听了3天WAIC的会&#xff0c; 大开眼界&#xff0c;算是上了堂大课。 本次参会的目的是听听AI企业信息化的想法、理论和实践。以进一步探索可能的业务场景。三天的会结束后&#xff0c;留下深刻印象的有如下几点。 大模型当道 2023这次大会的主题成了大模型&#xff0c;谈的…