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

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

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

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);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据中台管理系统原型

数据中台是一个通用性的基础平台&#xff0c;适用于各类行业场景&#xff0c;数据中台包含多元数据汇聚、数据标准化、数据开发、数据共享、数据智能、数据资产管理等功能&#xff0c;助力企业数字化转型。 数据汇聚 数据汇聚是将不同系统、不同类型的多元源数据汇聚至目标数据…

第二十届文博会中芬设计园分会场:发展新质生产力,释放文化创新活力

今年是中国&#xff08;深圳&#xff09;国际文化产业博览交易会&#xff08;以下简称“文博会”&#xff09;创办20周年&#xff0c;二十蝶变再启航&#xff0c;站在新的历史起点上&#xff0c;本届文博会将重点突出数字赋能、强化交易功能、激发和扩大文化消费、弘扬文化传承…

端午佳节,品尝食家巷传统面点与黄米粽子礼盒

端午佳节&#xff0c;品尝食家巷传统面点与黄米粽子礼盒 在这个端午节来临之际&#xff0c;食家巷倾情推出一款别具特色的端午礼盒&#xff0c;将甘肃的传统面点与地方特色黄米粽子完美融合&#xff0c;为您带来一场美味与传统的邂逅。 这款礼盒以甘肃传统面点一窝丝、油饼和烤…

立创EDA绘制PCB电路板

1、绘制好原理图后&#xff0c;点击设计---原理图转PCB&#xff0c;生成PCB文件 2、将元器件拖入电路板方框内&#xff0c;摆放布局并使用工具栏布线、放置过孔及丝印 3、然后顶层和底层铺铜 4、后面就可以生成制板文件发送嘉立创制板了。

干货教程【AI篇】| Topaz Video Enhance AI超好用的视频变清晰变流畅的AI工具,免费本地使用

关注文章底部公众号&#xff0c;回复关键词【tvea】即可获取Topaz Video Enhance AI。 一款非常好用的视频变清晰变流畅的AI工具&#xff0c;即提高视频的分辨率和FPS&#xff0c;亲测效果非常nice&#xff01;&#xff01; 免费&#xff01;免费&#xff01;免费&#xff01…

Google IO 2024有哪些看点呢?

有了 24 小时前 OpenAI 用 GPT-4o 带来的炸场之后&#xff0c;今年的 Google I/O 还未开始&#xff0c;似乎就被架在了一个相当尴尬的地位&#xff0c;即使每个人都知道 Google 将发布足够多的新 AI 内容&#xff0c;但有了 GPT-4o 的珠玉在前&#xff0c;即使是 Google 也不得…

笑铺日记:服装店看这3个数字,就知道赚不赚钱

明明店里每天人来人往&#xff0c;月底一算账&#xff0c;却发现没赚多少钱&#xff1f; 都说要数据分析&#xff0c;但是到底怎么做&#xff1f;这是每个老板都头疼不已的事情。 其实&#xff0c;服装店管好这3个数字&#xff0c;赚钱就不是事儿。 笑铺日记系统&#xff0c…

什么是等保测评?等保测评必须进行吗?

等保测评&#xff0c;全称为信息安全等级保护测评&#xff0c;是指对信息系统安全等级保护状况进行测试评估的活动。它是根据国家信息安全等级保护规范规定&#xff0c;由具有相应资质的测评机构&#xff0c;按照相关管理规范和技术标准进行的&#xff0c;目的是验证信息系统是…

深度学习技术之卷积神经网络

深度学习技术 卷积神经网络1. 导入需要的库2. 加载并显示两张图像2.1 加载图像2.2 创建子图2.3 打印图像形状2.4 打印合并后的图像数组的形状 3. 卷积层3.1 定义变量3.1.1 卷积核的大小&#xff08;u&#xff09;3.1.2 滑动步长&#xff08;s&#xff09;3.1.3 输出特征图的数量…

集成了Gemini的Android Studio,如虎添翼

今天将Android Studio升级到最新版&#xff08;Jellyfish&#xff09;。发现在new features中有一条&#xff1a; Code suggestions with Gemini in Android Studio 打开路径为&#xff1a; View > Tool Windows > Gemini 支持多国语言&#xff0c;英文、中文都能正确理解…

C++显式类型转换

本文主要分析C的4种显式类型转换 文章目录 static_cast基本数据类型转换const用于类层次结构void* dynamic_cast继承中的转换 const_castreinterpret_cast参考资料 我们使用显示类型转换&#xff0c;就是在告诉编译器要怎么解释这块内存。 在早期C/C中&#xff0c;显式的类型转…

Redis-分布式锁实现方式

文章目录 Redis分布式锁的作用&#xff1f;Redis分布式锁的底层原理实现&#xff1f;Redis分布式锁的应用场景&#xff1f;Redis分布式锁遇到相关的场景问题&#xff1f;死锁问题锁超时问题归一问题可重入问题阻塞与非阻塞问题公平锁&#xff08;Fair Lock)公平锁&#xff08;F…

【数据库02】优化、视图、触发器、锁、InnoDB引擎、事务高级

个人学习笔记记录 参考资料&#xff1a;数据库从入门到精通 &#x1f600;SQL优化 &#x1f3b6;insert 主键优化 主键顺序插入的性能是要高于乱序插入的 InnoDB的逻辑结构图 数据行是记录在page中的&#xff0c;而每一个页的大小是固定的&#xff0c;默认16K。 那也就意味…

Franz Electron + React 源码启动运行填坑指南

环境要求 安装miniconda python 环境electron/rebuild用得着&#xff0c;miniconda 默认自带的 python 是 3.11 版本&#xff0c;比较新&#xff1b; 安装virsual studio 2019 要把C桌面相关的都安装了&#xff0c;大概需要20G&#xff0c;不要安装到 C 盘&#xff0c;都安装到…

防静电托盘的用途和性能

防静电托盘主要的用途就是将静电消除&#xff0c;比较广泛的使用在电子的器件以及其在生产的过程中&#xff0c;需要进行转载的周转、运输、贮存和包装等&#xff0c;在行业中我们还可以称之为导静电的托盘&#xff0c;正常情况下防静电托盘的高度为100mm以下&#xff0c;比较适…

一招教你学浪app视频如何下载到本地

在这个知识爆炸的时代&#xff0c;学习从未如此便捷&#xff0c;而今天&#xff0c;我要分享的这个小秘密&#xff0c;将彻底改变你获取知识的方式&#xff1a;一招教你如何将学浪课程轻松下载到本地&#xff0c;让精彩的学习内容随时随地触手可及&#xff0c;开启你的随身学习…

用Div标签替换ul和li标签

使用 <div> 标签可以替换 <ul> 和 <li> 标签的功能&#xff0c;从而创建类似于列表的结构。下面是一个简单的示例&#xff0c;演示如何使用 <div> 标签替换 <ul> 和 <li> 标签&#xff1a;下面是我整理的接种解决方案&#xff0c;可以一起…

vue(九) 生命周期 v3.0和v2.0对比,父子组件生命周期的执行顺序

文章目录 生命周期vue2.0生命周期1.图示2.生命周期解释说明3.代码示例 vue3.0生命周期1.图示2.生命周期解释说明3.代码示例 父子组件中生命周期执行顺序v.3和v2.0生命周期对比 生命周期 每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听…

2024年【电工(高级)】考试总结及电工(高级)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年电工&#xff08;高级&#xff09;考试总结为正在备考电工&#xff08;高级&#xff09;操作证的学员准备的理论考试专题&#xff0c;每个月更新的电工&#xff08;高级&#xff09;复审考试祝您顺利通过电工&a…

Git系列:git show 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…