常用的JS数组去重方法大全

article/2025/11/2 9:31:46

写在前面:

我们要想使用数组去重,那就必须对数组有一定的了解,关于JS数组的一些方法以及使用,可参考:
①JavaScript 内置对象之-Array
②ES5新增数组方法
③浅谈JavaScript中ES6新增的Set和Map结构以及Array.from方法


下面进入正题:利用JS的数组实现去重的目的

        JS数组去重方法有很多,相信一些小伙伴也掌握了好多种方法,那接下来我就介绍一些比较常用的方法供大家参考。

方法1:使用indexOf()方法去除重复的元素

        indexOf方法返回给定元素在数组中第一次出现的位置,返回结果是匹配开始的位置。如果没有出现则返回-1

例:

var arr = [1,1,2,2,3,3,4,4];
var newArr = [];
for(var i=0,len=arr.length;i<len;i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i]);
}
}
console.log(newArr);

结果:
在这里插入图片描述

方法2:使用lastIndexOf()方法去除重复的元素
  • lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1;
  • lastIndexOf方法的用法跟indexOf方法一致,主要的区别lastIndexOf从尾部开始匹配,indexOf则是从头部开始匹配;
  • 另外,lastIndexOf的第二个参数表示从该位置起向前匹配。

例:

function noRepeat(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
}
return res;
}
console.log(noRepeat([1, 1, 2, 2, 3, 3, 4, 4]));

结果:
在这里插入图片描述

方法3:使用filter()与indexOf()方法去除重复的元素
  • filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回;
  • 它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回;
  • 该方法不会改变原数组;
  • filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组;
  • filter()去除重复元素依靠的是indexOf的属性,即总是返回第一个元素的位置,后面的重复元素位置与indexOf返回的位置不相等,所以filter()可以过滤掉它们。

例:

var arr = [1,1,2,2,3,3,4,4];var newArr = arr.filter(function(value,index,self){return self.indexOf(value) === index;
});
console.log(newArr);

结果:
在这里插入图片描述

方法4:使用ES6提供的Set结构去除重复的元素

        主要利用Set结构不能接收重复数据的特点。

例:

var arr = [1,1,2,2,3,3,4,4];function noRepeat(arr){var newArr = [];var myset = new Set(arr);for(var val of myset){newArr.push(val);
}return newArr;
}
var arr2 = noRepeat(arr);
console.log(arr2);

结果:
在这里插入图片描述

方法5:使用ES6提供的Set与扩展运算符去除重复的元素

        ES6的出现,真真是极方便的~~~

例:

var arr = [1,1,2,2,3,3,4,4];
function norepeat(arr) {let set = new Set(arr);arr = [...set];return arr;
}
console.log(norepeat(arr));

结果:
在这里插入图片描述

方法6:使用set与Array.from()方法去除重复的元素

        Array.from方法可以将 Set 结构转为数组。

例:

var arr = [1,2,2,2,3,3,4,4];
var newArr = Array.from(new Set(arr));
console.log(newArr);

结果:
在这里插入图片描述

方法7:使用splice()方法与双层循环去除重复的元素

        splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。

例:

var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr){for (var i = 0; i < arr.length; i++) {for (var j = 0; j < arr.length; j++) {if (arr[i] == arr[j] && i != j) {arr.splice(j, 1);}}}return arr;
}
var arr2  = noRepeat(arr);
console.log(arr2);   

结果:
在这里插入图片描述

方法8:使用includes()方法去除重复的元素

         includes()方法用于判断字符串是否包含指定的子字符串,如果找到匹配的字符则返回true,否则返回false。

例:

function noRepeat(arr) {var newArr = [];for (var i = 0; i < arr.length; i++) {if (!newArr.includes(arr[i])) {newArr.push(arr[i]);}}return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]));

结果:
在这里插入图片描述

方法9:使用forEach()和includes()方法去除重复的元素
  • forEach方法是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。
  • forEach的参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。

例:

function noRepeat(arr) {var newArr = [];arr.forEach(item => {return newArr.includes(item) ? '' : newArr.push(item)});return newArr;
}
console.log(noRepeat([1,1,2,2,3,3,4,4]));

结果:
在这里插入图片描述

方法10:利用空对象来记录新数组中已经存储过的元素

例:

var arr = [1,1,2,2,3,3,4,4];
var obj={};
var newArr=[];
for(var i=0;i<arr.length;i++){if(!obj[arr[i]]){obj[arr[i]]=true;newArr.push(arr[i]);}
}
console.log(newArr); 

结果:
在这里插入图片描述

方法11:使用sort()方法去除重复的元素

        使用sort()方法先将原数组排序,然后与相邻的进行比较,如果不同则存入新数组。(原数组长度不变,但要注意:sort方法不是按照大小排序,而是按照字典顺序)

例:

var arr = [1,1,2,2,3,3,4,4];
function noRepeat(arr) {var ret = [];arr.sort();  var res = arr[0];ret.push(arr[0]);for (var i = 1; i < arr.length; i++) {if (arr[i] != res) { ret.push(arr[i]);res = arr[i];}}return ret;
}
var arr2 = noRepeat(arr);
console.log(arr2); 

结果:
在这里插入图片描述


鄙人才疏学浅,如有纰漏,望各路巨佬不吝赐教~


http://chatgpt.dhexx.cn/article/LVZNTVls.shtml

相关文章

js去重都有哪些方法?

1、去重方法一 arr.splice 2、去重方法二 借助新数组&#xff0c;判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序) 3、创建一个新数组&#xff0c;判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中 4、借助i…

JS中数组去重的五种方法

数组去重的几种方法(JavaScript版&#xff09; 前言&#xff1a;你需要知道JavaScript中的 splice函数 的用法 splice函数介绍&#xff1a; splice函数用法&#xff1a;splice函数介绍看不懂没关系&#xff0c;怎么用一看例子一目了然 第一种&#xff1a;双重for循环去重 原…

js数组中对象去重的方法

一个数组中含有对象&#xff0c;并且去除数组中重复的对象 id相同的&#xff0c;保留第一个&#xff0c;其它的删除 let arr [{ id: 0, name: "张三" },{ id: 1, name: "李四" },{ id: 2, name: "王五" },{ id: 3, name: "赵六" },{…

js实现数组去重的方式(7种)

目录 JS数组去重的方式1.利用Set()Array.from()2.利用两层循环数组的splice方法3.利用数组的indexOf方法4.利用数组的includes方法5.利用数组的filter()indexOf()6.利用Map()7.利用对象 JS数组去重的方式 例&#xff1a;将下面数组去除重复元素&#xff08;以多种数据类型为例…

js数组去重(9种方法),你都会了吗?

以下共有九种数组去重的方式和详解&#xff08;包含对象数组去重&#xff09;&#xff1a; 1.利用Array.from(new Set)去重&#xff1a; // 1.利用set去重 // Set是es6新增的数据结构&#xff0c;似于数组&#xff0c;但它的一大特性就是所有元素都是唯一的&#xff0c;没有…

解决Linux没有ens33

#临时关闭 systemctl stop NetworkManager # 永久关闭网络管理命令 systemctl disable NetworkManager #开启网络服务 systemctl start network.service

【ubuntu虚拟机】ens33未出现在ifconfig问题

事情发生与2023年4月12日&#xff0c;windows上安装了docker-desktop&#xff0c;奈何wsl不好用&#xff0c;便卸载了&#xff0c;之后我的虚拟机ubuntu无法联网&#xff0c;于是开始解决之旅 事故原因 ifconfig查了一下&#xff0c;没有ens33网卡&#xff0c;于是用ip addres…

Centos开机后ens33网卡失效连不上网

今天使用xshell连接虚拟机一直失败 打开虚拟机ip addr 发现如下问题 解决方案 1.尝试重启网关 ifup ens33 &#xff08;无法解决&#xff09; # ifup ens332.停止网卡&#xff0c;设置disable后重新启动 &#xff08;依旧失败&#xff09; # systemctl stop NetworkManager…

centos7网络配置没有ens33文件

注意&#xff1a;此教程中的centos是已经能够上网的状态&#xff01; 问题来源 需要使用centos7来搭建一些服务器&#xff0c;由于我用的VMware总是自己变ip并且不能设置&#xff0c;所以只能从centos系统配置文件下手 。 从网上教程来看&#xff0c;centos7 的网卡名叫 ens33&…

Linux 初始化网络配置ens33

配置文件路径&#xff1a; [rootnode2 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno #IPV6INITyes #IPV6_AUTOCONFyes #IPV6_DEFROUTEyes #IPV6_PEERDNSyes #IPV6_PEERROUTESyes #IPV6_FAILURE_FATALno…

怎么修改Linux网络名为ens33,Centos7更改ens33网卡名称为eth0

用ifconfig查看网卡名称为ens33&#xff0c;现在要将它修改成eth0 [rootlocalhost ~]# ifconfig ens33: flags4163 mtu 1500 inet 192.168.1.3 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 2409:8a02:9014:8440:20c:29ff:fe95:cc8f prefixlen 64 scopeid 0x0 inet6 f…

linux怎么修改ens33文件,linux 修改centos7的网卡ens33修改为eth0

Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,而 CentOS7 提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的,缺点是比 eth0、wlan0 更难读,比如 ens33 。 如果不习惯使用新的命名规则,可以恢复使用传统…

linux网卡ens33,如何解决Linux 系统下 ifconfig 命令无网络接口 ens33

今天我在做Redis的哨兵集群模式的时候&#xff0c;以前都是好的&#xff0c;也不知道从什么时候开始就无法连接Redis服务器了&#xff0c;就是运行如下命令&#xff0c;没有效果&#xff1a;redis-server redis.conf&#xff0c;然后在通过命令查看redis的状态&#xff0c;始终…

centos找不到ens33

输入这行命令进入配置网络地址&#xff0c;却显示是新文件。 解决方法 先进入前面的文件夹cd /etc/sysconfig/network-scripts/ 然后再ls 发现我们的是ens192 cd ifcfg-ens192进入修改 最后 systemctl restart network 再ip add 查看

Ubuntu20.04 设置ens33网卡

简介&#xff1a;记录一下Ubuntu20.04 设置ens33网卡。起因&#xff1a;在虚拟机启动情况下&#xff0c;直接关闭主机。导致重新启动虚拟机后ens33网卡无法生成ip。 1.进入 /etc/netplan/ 目录 2.修改目录下文件 3.执行命令 netplan apply 再重启执行 ifconfig 就能看到 ens3…

ens33网卡IP地址丢掉了

背景 有的时候&#xff0c;vmware创建centos7的虚拟机上开始用的好好的&#xff0c;后来&#xff0c;ens33的ip地址就不见了。 试图启动ens33&#xff0c;发现无法启动 解决办法 chkconfig NetworkManager off chkconfig network on service NetworkManager stop service ne…

CentOS:ens33没有IP地址

CentOS&#xff1a;ens33没有IP地址 1.环境版本 2.问题异常 启动CentOS操作系统后&#xff0c;经过ip a命令&#xff08;或ifconfig&#xff09;查看无IP地址&#xff1a; 3.解决步骤 root角色修改配置文件&#xff1a; # vi /etc/sysconfig/network-scripts/ifcfg-ens33将O…

linux虚拟机ifcfg-ens33网卡配置,静态IP、网关、子网掩码、DNS地址的配置

使用ifconfig命令显示命令找不到&#xff0c;可以yum install net-tools安装。 1、使用ifconfig查找虚拟机现有的网络配置 其中lo是本地网络&#xff0c;ens33是主要配置的网络 2、查找网络配置所需要的资料&#xff1a;ip地址范围、网关、子网掩码、DNS地址 ip地址范围&…

c语言字符串长度,占用字节大小,存放位置等问题

参考文章&#xff1a;https://www.cnblogs.com/xmhsincere/p/4915354.html 1、三者长度strlen问题 int main () {char *str"xiaolong";printf("%d\n",strlen(str));return 0; } 结果&#xff1a; #include <stdio.h> #include <string.h>i…

C语言字符串的长度与字符串内存长度区别

这个问题不难&#xff0c;但是很容易忽略&#xff0c;导致混淆&#xff0c;如下&#xff1a; “AB”这个字符串的长度是多少呢&#xff1f; “AB”这个字符串的所占内存长度是多少&#xff1f; 赋值给字符数组后会不会改变呢&#xff1f; char a[] “AB”; 那么a的字符长度是…