js数组去重常见方法

简单数组

1、使用filter()方法:通过filter()方法遍历数组,返回仅包含首次出现的元素的新数组。

const arr = [1, 2, 3, 4, 2, 3, 5];
const list = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(list); // [1, 2, 3, 4, 5]

2、使用reduce()方法:通过reduce()方法遍历数组,将元素存储在一个临时对象中,每次遇到重复元素时将其跳过,最后返回所有不重复元素的数组。

const arr = [1, 2, 3, 4, 2, 3, 5];
const list = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(list); // [1, 2, 3, 4, 5]

3、使用Map:通过Map对象可以将数组元素作为键,通过Map的键唯一性特性去重,然后再将Map对象转换为数组。

const arr = [1, 2, 3, 4, 2, 3, 5];
const list = [...new Map(arr.map(item => [item, item])).values()];
console.log(list); // [1, 2, 3, 4, 5]

json数组

可以使用Set对象和Array.from()方法去除JSON数组中的重复项,但是需要注意的是Set对象只去除原始类型(如数字、字符串、布尔值)的重复项,对于对象类型,只有当两个对象的内容完全相同时,才会被视为重复 。所以不能直接使用复合类型,要先通过json转为字符串格式
如下

const arr = [{ name: '张三', age: 18 },{ name: '李四', age: 20 },{ name: '张三', age: 18 },{ name: '王五', age: 22 }
];
const list = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse);
console.log(list);
// [{ name: '张三', age: 18 }, { name: '李四', age: 20 }, { name: '王五', age: 22 }]

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

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

相关文章

【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在Gitee或GitHub给我点个 Start ⭐⭐👍👍 ✍Gitee开源项目地址👉:https://gitee.com/cheinlu/groundhog-charging…

力扣Lc19--- 268. 丢失的数字(java版)-2024年3月20日

1.题目描述 2.知识点 (1)比如数组里面有n个数,然后计算这n个数的总和(用等差求和数列计算),然后减去数组的和,用总和减去数组和即为所得 (2)加强型 for 循环(也称为 for-each 循环&…

spring boot切面execution表达式添加多个包路径

问题描述 在Spring Boot中,如果你想为多个包中的方法创建一个切面,你可以在Pointcut注解中使用||操作符来指定多个包。 解决方案: // 定义切入点为两个包中的任意方法 Pointcut("execution(* com.example.package1..*.*(..)) || execu…

Leetcode 459:重复的子字符串

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s "aba" 输出: false示例 3: 输入: s "abcabcabcabc&quo…

单片机--数电(4)

触发器 数字电路中:分组合逻辑电路与时序逻辑电路两大类 组合逻辑电路的基本单元是门电路(与或非等一些门电路) 时序逻辑电路的基本单元是触发器 触发器与门电路的区别 门电路某一时刻的输出信号完全取决于该时刻的输入信号,…

销售数据分析怎么做?用好这5个数据分析方法与模型就足够了。

企业经营其实简单来说就是做买卖,有了买卖自然就产生了销售数据,那怎么能让这些销售数据产生价值呢?答案就是数据分析。通过对销售数据的分析,可以帮助企业及时洞察市场动向,发现企业销售过程中的问题,调整…

使用C/C++举例说明使用宏定义时需要注意的各个点

好的,下面我将分别举例说明使用宏定义时需要注意的各个点: (a)宏名和替换文本之间用空格分开: #define MAX_VALUE 100 // 正确的宏定义,MAX_VALUE是宏名,100是替换文本 不要写成等号连接的形…

ResNet《Deep Residual Learning for Image Recognition》

ResNet论文学习 引言Deep Residual Learning 深度残差学习网络结构 总结代码复现 引言 深度网络自然地以端到端的多层方式集成低/中/高级特征和分类器,特征的“级别”可通过堆叠层的数量来丰富 随着网络层数加深,提取的特征越强,但是 网络…

2024.3.21 ARM

串口控制三盏灯亮灭 main.c #include "uart4.h"int main() {//串口初始化uart4_init();//led初始化led_init();char i;//char s[128];int count 0;int count2 0;int count3 0;while (1){i getchar();putchar(i);//最终的现象:键盘输入a,…

表情识别数据集

表情视频数据集 在许多的研究中,研究者通常会把人脸表情识别区分为静态的人脸表情识别(static facial emotion recognition)和动态的人脸表情识别(dynamic facial emotion recognition)。前者希望通过单张图片辨别人的表情从而达到识别人情绪的目的,而后者希望感知视频/…

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程

在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的,首先操作系统是一个软件,它是对上提供一个良好高效,稳定的环境的,这是相对于用户来说的,对下是为了进行更好的软硬件管理的,所以操作系统…

多数据源 - dynamic-datasource | 进阶 - 数据库加密

文章目录 实现原理EncDataSourceInitEvent 类与 DataSourceInitEvent 接口配置 DataSourceInitEvent 为 Bean使用案例第 1 步:使用私钥加密第 2 步:在 YAML 中使用 ENC(xxx) 配置相关文章🗯️ 上节回顾:前节中,了解了 dynamic-datasource 的懒加载/初始化 SQL/无数据源启…

TinyEMU源码分析之虚拟机初始化

TinyEMU源码分析之虚拟机初始化 1 初始化结构参数2 配置RAM地址空间3 初始化设备4 拷贝BIOS和Kernel5 手动写入5条指令6 体验第一条指令的执行 本文属于《 TinyEMU模拟器基础系列教程》之一,欢迎查看其它文章。 本文中使用的代码,均为伪代码&#xff0c…

vue2使用webSocket双向通讯

基于webSocket实现双向通信,使用webworker保持心跳。 由于浏览器的资源管理策略会暂停或限制某些资源的消耗,导致前端心跳包任务时效,后端接收不到webSocket心跳主动断开,因此需要使用webworker保持心跳 引入webworker npm insta…

关于安卓调用文件浏览器(一)打开并复制

背景 最近在做一个硬件产品,安卓应用开发。PM抽风,要求从app打开文件浏览器,跳转到指定目录,然后可以实现文件复制粘贴操作。 思考 从应用开发的角度看,从app打开系统文件浏览器并且选择文件,这是很常见…

Java 中 BitSet 类的用法

Java 中 BitSet 类的用法 API构造置位为 true清除为 false查找位反转长度运算流其他 原理底层数据结构如何工作 API 构造 无参构造 :默认为 64 个 bit 的容量 BitSet bitset new BitSet();有参构造 :设置为 n 个 bit 的容量 BitSet bitset new BitSe…

.NET Framework 服务实现监控可观测性最佳实践

环境信息 系统环境:Windows Server开发语言:.NET Framework > 4.6.1APM探针包:ddtrace 准备工作 安装 Datakit 主机部署: 主机安装 - 观测云文档 打开采集 APM 采集器 Windows 主机配置 # 到如下路径,把ddtr…

广东省30m二级分类土地利用数据(矢量)

广东省,地处中国大陆最南部,属于东亚季风区,从北向南分别为中亚热带、南亚热带和热带气候,是中国光、热和水资源最丰富的地区之一。主要河系为珠江的西江、东江、北江和三角洲水系以及韩江水系。广东省面积为17.977万平方公里&…

vue+element 前端实现增删查改+分页,不调用后端

前端实现增删查改分页&#xff0c;不调用后端。 大概就是对数组内的数据进行增删查改分页 没调什么样式&#xff0c;不想写后端&#xff0c;当做练习 <template><div><!-- 查询 --><el-form :inline"true" :model"formQuery">&l…

2024山东医养健康展,济南养老产业展,中国老龄用品展

打造养老产业交流与合作平台&#xff0c;助力企业便捷开拓买方市场&#xff0c;2024山东老博会5月27日举办&#xff1b; 2024第6届中国&#xff08;济南&#xff09;国际养老服务业展览会&#xff08;CSOLDE山东老博会&#xff09; The 2024 sixth China (Jinan) Internationa…