【JS】数组去重

方式一:使用 Set

const handler = (array) => {return [...new Set(array)];
}
const array = [1, 2, 2, 3, 3, 4, 5, 5];
console.log(handler(array)); // [1, 2, 3, 4, 5]

方式二:使用filter

const handler = (array) => {return array.filter((item, index) => array.indexOf(item) === index);
}
const array = [1, 2, 2, 3, 3, 4, 5, 5];
console.log(handler(array)); // [1, 2, 3, 4, 5]

方式三:使用reduce

const handler = (array) => {return array.reduce((accumulator, currentValue) => {if (!accumulator.includes(currentValue)) {accumulator.push(currentValue);}return accumulator;
}, []);
}
const array = [1, 2, 2, 3, 3, 4, 5, 5];
console.log(handler(array)); // [1, 2, 3, 4, 5]

方式四:复杂类型也需要去重

由于严格相等对于复杂类型是判断,所以多个复杂类型的内容相同时,也需要去重。

声明判断两个值是否相等的方法

function isEqual(a, b) {// 如果 a 和 b 是基本类型或者相等,则直接返回 trueif (a === b) {return true;}// 如果 a 和 b 是对象if (typeof a === 'object' && typeof b === 'object') {// 如果 a 和 b 的键数量不相等,则直接返回 falseif (Object.keys(a).length !== Object.keys(b).length) {return false;}// 递归比较对象的每个键值对for (let key in a) {if (!isEqual(a[key], b[key])) {return false;}}return true;}// 如果 a 和 b 是数组if (Array.isArray(a) && Array.isArray(b)) {// 如果数组长度不相等,则直接返回 falseif (a.length !== b.length) {return false;}// 递归比较数组的每个元素for (let i = 0; i < a.length; i++) {if (!isEqual(a[i], b[i])) {return false;}}return true;}// 其他情况返回 falsereturn false;
}

根据上面的函数返回值作为判断条件

function handler(arr) {let result = []for (let i = 0; i < arr.length; i++) {let isFind = falsefor (let j = 0; j < result.length; j++) {if (isEqual(result[j], arr[i])) {isFind = truebreak}}if (!isFind) {result.push(arr[i])}}return result
}
let a = [[1, 2], [1, 2], ["1", "2"], [1, "2"], [1, 2, 3]]
console.log(handler(a))

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

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

相关文章

pytest的request fixture:实现个性化测试需求

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在前文章中&#xff0c;我们看到pytest_repeat源码中有这…

Android 13 有线以太网静态ip保存逻辑梳理分析

源码环境&#xff1a;高通Android 13 这里特别说明&#xff0c;Android13中&#xff0c;ipconfig.txt配置文件目录有改变 以前&#xff1a;/data/misc/ethernet/ipconfig.txt 最新的有线网配置文件保存目录&#xff1a; /data/misc/apexdata/com.android.tethering/misc/ethe…

C++类和对象第二弹(构造,析构和拷贝构造函数)

目录 前言 1. 类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3. 析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 总结 前言 本文主要讲解类中构造函数、析构函数和拷贝构造函数。关于这三个类中默认成员函数的知识点很多&#xff0c;有许多…

视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图

本节是对上一节BA的进一步简化&#xff0c;旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解&#xff08;涉及李代数扰动模型求导&#xff09;&#xff0c;书中的相关推导存在跳步&#xff08;可能数学功底强的人认为过渡的理所当然&#xff09;&#xff0c;笔者参考了知…

【Gradle】Gradle的构建过程

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置&#xff0c;也增加了基于Kotlin语言的kotlin-based DSL&#xff0c;抛弃了基于XML的各种繁琐配置。 面向Java应用为主。当前其支持的语言C、J…

免费网址导航网站源码v1.7.0最新版内置多个模板

效果图 PC端&移动端&#xff08;共有7款主题&#xff09; 1.5IUX搜索 2.Onenav主题 六零二开 3.基于彩虹工具网修改 4.默认主题 5.基于default主题开发 6.极简个人主页主题 7.孤客主题 后台管理效果图 项目说明 孤客导航页&#xff08;LoSFeR&#xff09;是一个…

Zephyr Windows开发环境搭建

Zephyr 如果有错误或未及时更新&#xff0c;请以官网文档为主 官网&#xff1a;https://docs.zephyrproject.org/latest/develop/getting_started/index.htm 下载安装 Chocolatey 这是一个类似于在Linux系统下 yum 和 apt 那样的包管理器 官网&#xff1a;https://chocolat…

安宝特方案 | AR工业解决方案系列-工厂督查

在工业4.0时代&#xff0c;增强现实&#xff08;AR&#xff09;技术正全面重塑传统工业生产&#xff0c;在工厂监督领域&#xff0c;其应用不仅大幅提升了生产效率、监测准确性和规范执行程度&#xff0c;而且为整体生产力带来了质的飞跃。 01 传统挑战与痛点 在制造业生产流程…

未来趋势:探索Facebook在数字化时代的发展方向

在当今日益数字化的时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;一直处于行业的前沿&#xff0c;不断地探索和引领社交媒体的发展趋势。本文将深入探讨Facebook在数字化时代的发展方向&#…

微信原生小程序封装用户登陆

场景: 后端在用户登陆后会返回resfreshToken和token; open-type是小程序中button的属性之一,合法霍倩倩getUserInfo,引导用户授权,可以从bindgetuserinfo回调中获取到用户信息。button可以指定plain属性,完全去掉样式,跟view类似。 封装的登陆文件(user.js) /*** 用户…

如何解决Charles抓包乱码?

一、问题&#xff1a;抓包乱码 二、 1、打开Charles安装的目录下&#xff0c;Charles.ini文件&#xff0c; 2、添加内容、保存 vmarg.5-Dfile.encodingUTF-8 三、重启&#xff0c;再次抓包

软考之【系统架构设计师】

系统架构设计师 根据原人事部、原信息产业部文件&#xff08;国人部发[2003]39号&#xff09;文件规定&#xff0c;计算机软件资格考试纳入全国专业技术人员职业资格证书制度的统一规划&#xff0c;实行统一大纲、统一试题、统一标准、统一证书的考试办法&#xff0c;每年举行…

Object.assign()用法及详细分析到底是浅拷贝还是深拷贝?

Object.assign方法用于对象的合并&#xff0c;将源对象&#xff08;source &#xff09;的所有可枚举属性&#xff0c;复制到目标对象&#xff08;target&#xff09;。 Object.assign(target,source1,source2) Object.assign方法的第一个参数是目标对象&#xff0c;后面的参数…

Next.js动态路由如何使用

官方解释 Next.js 允许你创建具有 动态路由 的页面。例如&#xff0c;你可以创建一个名为 pages/posts/[id].js 的文件用以展示以 id 标识的单篇博客文章。当你访问 posts/1 路径时将展示 id: 1 的博客文章。 代码 这里先用一个写好的实例代码来展示 import React from react…

Python-Qt上位机设计

1.下载designer软件 2.自己设计一个界面 3.在指定部件加入点击响应命令函数名 鼠标点击目标部件拖出信号线 4.保存生成.ui文件&#xff0c;用pycharm打开 5.生成.py文件 6.新建一个功能文件 上图中class MainWindow的具体代码不予展示。 7.生成exe文件 将写好的py文件保存&a…

记一次对接第三方数据,存入数据库后清洗数据,数据重复

一现象&#xff1a; 对接第三方数据&#xff0c;先全量存入数据库&#xff0c;然后进行跑批清洗&#xff0c;在清洗过程中发现每次都有不同条数的数据重复。 二根本原因&#xff1a; 就是数据库中有的重复的字段条数存在空格&#xff0c;有的没有。 QueryWrapper<DDeviceT…

java的JDK动态代理

JDK动态代理是指&#xff1a;代理类实例在程序运行时&#xff0c;由JVM根据反射机制动态的生成。也就是说代理类不是用户自己定义的&#xff0c;而是由JVM生成的。 由于其原理是通过Java反射机制实现的&#xff0c;所以在学习前&#xff0c;要对反射机制有一定的了解。传送门&…

模型可视化-TensorBoard

TensorBoard 是一个由 TensorFlow 提供的可视化工具&#xff0c;用于展示 TensorFlow 训练过程中的各种指标和结果。它提供了一系列功能&#xff0c;帮助用户更好地理解、调试和优化他们的 TensorFlow 模型。 TensorBoard 可以用于以下几个方面&#xff1a; **训练过程可视化&…

天星金融细说社保 筑牢民生保障防线

随着经济的蓬勃发展与社会的不断进步&#xff0c;社保制度作为保障人民群众切身利益的重要机制&#xff0c;其重要性日益凸显。近年来&#xff0c;社保体系的不断完善与更新&#xff0c;使得群众对社保的参与意识逐渐增强。然而&#xff0c;却有人利用群众的需求&#xff0c;以…

解释一下什么是宏定义

在预编译时将宏名替换成字符串的过程称为"宏展开"(也叫宏替换)。 宏名一般用大写&#xff0c;以便于与变量区别 宏定义不作语法检查&#xff0c;只有在编译被宏展开后的源程序才会报错 宏定义不要行末加分号 #define PI 3.14 #define MAX(a, b) ((a) > (b) ?…