前端 JS 经典:数组去重万能方法

news2025/1/23 10:20:56
前言:只需要掌握这一个方法,就可以对有任何重复的数据数组,进行去重了。

可以自己思考下,怎么对以下对象数组去重:

const arr = [
  { a: 1, b: 2 },
  { b: 2, a: 1 },
  { a: 1, b: 2, c: { a: 1, b: 2 } },
  { b: 2, a: 1, c: { b: 2, a: 1 } },
];

开始构建去重函数:

// 判断是否对象
const isObject = (val) => typeof val === "object" && val !== null;

// 判断两个数据是否相同
const equals = (val1, val2) => {
  if (!isObject(val1) || !isObject(val2)) return Object.is(val1, val2);
  if (val1 === val2) return true;

  const val1Keys = Object.keys(val1);
  const val2Keys = Object.keys(val2);
  if (val1Keys.length !== val2Keys.length) return false;
  for (const key of val1Keys) {
    if (!val2Keys.includes(key)) {
      return false;
    }
    const res = equals(val1[key], val2[key]);
    if (!res) return false;
  }
  return true;
};

// 数组去重
const deduplication = (arr) => {
  const newArr = [...arr];
  for (let i = 0; i < newArr.length; i++) {
    for (let j = i + 1; j < newArr.length; j++) {
      if (equals(newArr[i], newArr[j])) {
        newArr.splice(j, 1);
        j--;
      }
    }
  }
  return newArr;
};

使用去重函数,newArr 就是去重后返回的数组:

let newArr = deduplication(arr);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2 中使用audio播放音频

<audio controls ref"audioPlayer" style"width:800px;"><source :src"obj.audioUrl" /></audio> data() {return {obj: {audioUrl: require(../../../../public/audio/video.wav)}}}, 有个地方一定要注意一下. 如果不写req…

推荐丨免费的HTTPS证书在哪里可以申请?怎么申请?

当然&#xff0c;申请HTTPS证书的简化流程大致可以分为以下四个步骤&#xff1a; 1. 确定证书类型&#xff1a; - 首先&#xff0c;根据你的网站需求选择合适的HTTPS证书。常见类型包括&#xff1a;域名验证型&#xff08;DV&#xff09;、组织验证型&#xff08;OV&#xff09…

智慧校园是什么?如何定义?

智慧校园从边界上来说&#xff0c;是指以物联网为中心的智慧化的学校学习、日常生活一体化的环境&#xff0c;经过信息化手法将教育、教务办理和学校日子进行充沛交融&#xff0c;完结智慧化服务和办理的学校形式。 现在智慧校园已成未来趋势&#xff0c;我国的学校环境阅历了巨…

在springboot项目中自定义404页面

今天点击菜单的时候不小心点开了一个不存在的页面&#xff0c;然后看到浏览器给的一个默认的404页面 后端的程序员都觉得这页面太丑了&#xff0c;那么怎么能自定义404页面呢&#xff1f; 很简单&#xff0c;在我们的springboot的静态资源目录下创建一个error包&#xff0c;然…

氮气柜开门停止充氮、开门亮灯和超湿报警功能介绍

氮气柜是一种专门设计用于存储对湿度敏感的电子元器件、半导体材料、精密仪器、化学试剂等物品的设备&#xff0c;它通过注入高纯度氮气来降低内部湿度&#xff0c;以防止物品受潮或氧化。除基本功能外&#xff0c;沐渥科技新增了开门停止充氮、开门亮灯以及超湿报警这三个功能…

特征衍生-多变量交叉组合特征衍生

https://www.bilibili.com/video/BV1Kg411n7jv?p21&vd_source08e23da22e328e8950aeb24d2001d586

【AI绘画】Stable diffusion初级教程08——提示词(prompt)该如何写

今天是一篇干货&#xff0c;干的喝水的那种…… 写之前呢&#xff0c;先给大家打个比方&#xff1a;现在刚入门学习SD的相当于刚上学的小学生&#xff0c;提示词就相当于作文&#xff0c;还是英语作文&#xff0c;如果你总是抄抄抄&#xff0c;不知道作文的要点&#xff0c;语法…

笔记-Windows NFS → 中文乱码导致文件找不到

前提准备 项目中有这么一块业务 1、 脚本同步 这一环&#xff0c;是运维同事通过脚本实现的&#xff0c;所以我没去关注 2、 读取文件并上传 这一环&#xff0c;是我实现的&#xff0c;稳定运行了很长一段时间了&#xff0c;一直没出问题 中文乱码** 直到有一天&#xff0…

Typora + AliyunOSS + PicGo + OneDrive 搭建同步笔记本

文章目录 Typora AliyunOSS PicGo OneDrive 搭建同步笔记本1. 购置阿里云OSS资源2. 配置PicGo3. Typora oneDrive4. 注意 Typora AliyunOSS PicGo OneDrive 搭建同步笔记本 前记: 尝试使用Gitee和Github&#xff0c;效果都十分不理想 Gitee&#xff1a; repository仓库…

什么开放式耳机好用?2024五大爆款机型安利!

​2024年耳机的大热门毫无疑问的是开放式耳机&#xff0c;开放式耳机有着更健康的听音表现和极佳的佩戴舒适度&#xff0c;开放式设计在享受音乐的同时还可以清楚地听到外界的声音&#xff0c;这有助于在户外活动时保持对周围环境的警觉&#xff0c;增加使用时的安全性。作为一…

气膜体育馆的基础设施有哪些—轻空间

随着体育事业的迅速发展和全民健身意识的提升&#xff0c;现代体育场馆设施也在不断更新换代。新型气膜体育馆的出现&#xff0c;解决了传统体育场馆构建审核难、时间长、门槛高的问题&#xff0c;有利于构建多样化的体育场馆&#xff0c;提升人均体育场馆面积。 气膜建筑因其建…

医院内外网文件交互,关键在于安全、效率和便捷

目前&#xff0c;国内医院内外网隔离的网络建设已较为普遍&#xff0c;医院涉及大量患者信息、疾病研究、学术报告等资料&#xff0c;数据具有重要的价值&#xff0c;因此医院的内外网建设成为基本共识。 医院的内外网是相互对应而言的&#xff0c;一般来说&#xff0c;外网指医…

【Python】语句与众所周知【自我维护版】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 本篇博客是在之前的基础上进行的维护 目录 条…

基于CentOS-7搭建hadoop3.3.6大数据集群(保姆级教程)

目录 安装虚拟机 为hadoop用户添加权限 关闭防火墙 修改主机名以及ip地址映射 配置ip 连接xshell &#xff0c;以hadoop用户登录 创建目录并将该文件夹权限赋予hadoop用户 安装配置jdk 关闭虚拟机&#xff0c;克隆其他两个节点 修改主机名和ip地址 配置免密登录 安装…

如何在VS Code中安装插件并进行中文化。

相关文章推荐: 如何下载和安装Visual Studio Code&#xff08;VSCode&#xff09; 在使用Visual Studio Code&#xff08;简称VS Code&#xff09;进行开发时&#xff0c;安装插件可以极大地提升开发效率和使用体验。而将VS Code插件界面进行中文化&#xff0c;则能更好地满足中…

在 Django 中获取已渲染的 HTML 文本

在Django中&#xff0c;你可以通过多种方式获取已渲染的HTML文本。这通常取决于你希望在哪个阶段获取HTML文本。下面就是我在实际操作中遇到的问题&#xff0c;并且通过我日夜奋斗终于找到解决方案。 1、问题背景 在 Django 中&#xff0c;您可能需要将已渲染的 HTML 文本存储…

计算机网络-路由策略与路由控制一

到目前为止我们学习了路由与交换基础&#xff0c;路由协议有静态、RIP、OSPF、IS-IS等&#xff0c;但是根据实际组网需求&#xff0c;往往需要实施一些路由策略对路由信息进行过滤、属性设置等操作&#xff0c;通过对路由的控制&#xff0c;可以影响数据流量转发。 因此我们开始…

【刷题篇】二分查找(二)

文章目录 1、山脉数组的峰顶索引2、寻找峰值3、寻找旋转排序数组中的最小值4、LCR 点名 1、山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] &l…

停车场车位引导系统是什么,停车场车位引导系统有哪些作用?

随着城市交通的快速发展&#xff0c;车辆的数量也在迅速增长&#xff0c;随之而来的就是停车难的问题&#xff0c;那么在城市中&#xff0c;如何合理的利用好现有资源&#xff0c;让停车资源得到合理利用呢&#xff1f;这就需要一套科学有效的智能停车场系统&#xff0c;可以帮…

FreeRTOS【6】线程优先级

1.开发背景 基于上一篇指引&#xff0c;已经了解了线程的阻塞&#xff0c;这个篇章主要介绍线程优先级的影响 2.开发需求 设计实验验证高优先级会抢占低优先级线程 CPU 3.开发环境 window10 MDK STM32F429 FreeRTOS10.3.1 4.实现步骤 1&#xff09;创建测试线程&#xff…