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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
函数计算FC,每月免费额度15元,12个月
简介: 你敢信这5种json数组去重方法的实现思路竟然是chatgpt写的,chatgpt对函数的理解也太准确了吧!

在日常开发中,我们经常会遇到需要去重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.将过滤后的数组作为返回值返回。
```js
/**
 * 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中不存在item
             uniqueArr.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根据函数写出的实现思路准确吗?欢迎留言讨论。


✍创作不易,求关注😄,点赞👍,收藏⭐️

相关文章
|
3月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
4天前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
2月前
|
JSON JavaScript IDE
JSON 数据格式化方法
JSON 数据格式化方法
56 3
|
3月前
|
API 数据安全/隐私保护 Python
ChatGPT邮箱API发送邮件有什么方法吗
ChatGPT邮箱API提供多样化的邮件发送方式:SMTP协议、HTTP请求、直接API接口及电子邮件库(如Python&#39;s smtplib和JavaMail)。用户可依据需求选择合适的方法,配置SMTP服务器地址、端口、用户名和密码等信息,实现便捷的编程发邮件。首先确保邮件服务器配置正确,然后参照文档指南开始使用。
|
2月前
|
JSON 关系型数据库 数据库
PostgreSQL中json_to_record函数的神秘面纱
`json_to_record`是PostgreSQL中的函数,用于将JSON数据转换为RECORD类型,便于查询和分析。基本用法是传入JSON数据,如`SELECT json_to_record(&#39;{&quot;name&quot;: &quot;张三&quot;, &quot;age&quot;: 30}&#39;::json);`。还可结合FUNCTION创建自定义函数,实现复杂功能。在实际应用中,它简化了对JSON格式数据的处理,例如筛选年龄大于30的用户。了解并善用此函数能提升数据库操作效率。本文由木头左分享,期待你的点赞和收藏,下次见!
PostgreSQL中json_to_record函数的神秘面纱
|
2月前
|
JSON Java 数据格式
Java中创建Json对象的方法和详细代码
Java中创建Json对象的方法和详细代码
32 1
|
2月前
|
JSON JavaScript 前端开发
jQuery获取json文件的方法
jQuery获取json文件的方法
26 2
|
2月前
|
JSON PHP 数据格式
蓝易云 - PHP用CURL发送Content-type为application/json的POST请求方法
在这段代码中,我们首先创建了一个包含我们要发送的数据的数组,并使用 `json_encode`函数将其转换为JSON格式。然后,我们初始化了一个cURL会话,并设置了一些选项,包括POST请求方法、要发送的数据、返回结果和HTTP头部信息。最后,我们执行了cURL请求并关闭了会话。
67 2
|
2月前
|
JSON 数据格式 微服务
.NET下 支持大小写不敏感的JSON Schema验证方法
有很多应用程序在验证JSON数据的时候用到了JSON Schema。 在微服务架构下,有时候各个微服务由于各种历史原因,它们所生成的数据对JSON Object属性名的大小写规则可能并不统一,它们需要消费的JSON数据的属性名可能需要大小写无关。 遗憾的是,目前的JSON Schema没有这方面的标准,标准中都是大小写敏感的。在类似上述情况下,这给使用JSON Schema进行数据验证造成了困难。
|
3月前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
117 3