JS中数组去重的五种方法

article/2025/11/2 11:00:26

数组去重的几种方法(JavaScript版)

 

前言:你需要知道JavaScript中的 splice函数 的用法

splice函数介绍:

 splice函数用法:splice函数介绍看不懂没关系,怎么用一看例子一目了然

第一种:双重for循环去重 

原理 两两比较如果相等的话就删除第二个 
例如: 1,2,3,4,5,3,7,8
先让第一个1 即arr[0]与后面的一个个比较 如果后面的值等于arr[0] 删除后面的值 
第一次结束后的结果是 1,2,3,4,5,7,8 删除了后面所有的3
同理 第二次 第三会删除与自己相同的元素

// 第一种方法:
function noRepeat1(arr){// 第一层for用来控制循环的次数for(var i=0; i<arr.length; i++){//第二层for 用于控制与第一层比较的元素for(var j=i+1; j<arr.length; j++){//如果相等if(arr[i] == arr[j]){//删除后面的 即第 j个位置上的元素  删除个数 1 个arr.splice(j,1);// j--很关键的一步  如果删除 程序就会出错 //j--的原因是 每次使用splice删除元素时 返回的是一个新的数组 // 这意味这数组下次遍历是 比较市跳过了一个元素/*例如: 第一次删除后 返回的是 1 1 3 2 1 2 4*  但是第二次遍历是 j的值为2  arr[2] = 3*  相当于跳过一个元素 因此要 j--* */j--;}}}return arr;
}var array=[1,2,3,4,5,3,7,8];
var arr=noRepeat1(array);
console.log(arr);

 方法二:单层for循环,多了一个sort函数

function norepeat(arr){arr.sort();//先排序让大概相同的在一个位置,这里为什么说是大概相同 是因为sort排序//是把元素当字符串排序的 它和可能排成 1 1 10 11 2 20 3 ... 不是我们想要的从小到大for(var i = 0; i < arr.length-1;i++){
//还是两两比较 一样删除后面的if(arr[i]==arr[i+1]){arr.splice(i,1);//i-- 和j--同理i--;}}return arr;
}var array=[1,2,3,4,5,3,7,8,4];
var arr=norepeat(array);
console.log(arr);

方法三

原理:用一个空数组去存首次 出现的元素 
利用 indexOf 属性 indexOf是返回某个指定的字符在字符串中出现的位置,如果没有就会返回-1 

var fruits = ["Banana", "Orange", "Apple", "Mango","Apple"]; 
var a = fruits.indexOf("Apple");
console.log(a);clear

返回第一次出现的位置

 因此我们可以很好的利用这个属性 当返回的是 -1时 就让其存入数组

function noRepeat2(arr){var newArr = [];for(var i = 0; i < arr.length; i++){if(newArr.indexOf(arr[i]) == -1){//解释:如果新数组里没有就放进去,有就放不进了newArr.push(arr[i]);}}return newArr;
}var array=[1,2,3,4,5,3,7,8];
var arr=noRepeat2(array);
console.log(arr);

方法四:

 对象也是存储属性名的数组     abj[arr[i]]    arr[i]的值对应的就是key   ,然后value 得obj自己赋值    如果arr[a]=arr[b]    就是key相等   就下一个  abj[arr[i]] !=undefined   不会进入循环

原理:利用对象的思想 如果对象里没有这个属性的话就会返回undefined 
利用这个原理当返回的是undefined时 让其放入数组 然后在给这个属性赋值

function norepeat3(arr) {var obj = {};var newArr = [];for(var i = 0; i < arr.length; i++) {if(obj[arr[i]] == undefined) {newArr.push(arr[i]);obj[arr[i]] = 1;}}return newArr;
}var array=[1,2,3,4,5,3,7,8];
var arr=norepeat3(array);
console.log(arr);

方法五

原理:循环比较如果相等的让后面的元素值为0 最后在输出的时候删除为0的 这个前提是你的数据里不能有0 但是凡事可以变通你可以设置任何值替代这个0 这个方法是我当时想到实现的所以没有进行很好的优化

var newArr = [];
var arr=[1,2,3,4,5,3,7,8];//控制外循环for(var i=0; i<arr.length;i++){//内存循环 只比较后面的for(j=i+1;j<arr.length;j++){//如果相等就让其值等于0if(arr[i]==arr[j]){arr[j]=0;}}//去除值为0的if(arr[i]==0){continue;}else{//放入新的数组newArr.push(arr[i]);} }console.log(newArr);
  1.   


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

相关文章

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的字符长度是…

C语言 字符串

1&#xff0c;一维字符数组 &#xff08;1&#xff09;定义 char 数组名 [大小]; &#xff08;2&#xff09;初始化字符数组 char s[7]{h,a,a,p,y} //其余不确定 char s[ ]....... //编译器会计算出数组大小 static char s[7]{h,a,a,p,y} //其余为0 所代表的是字符…

C语言计算字符串长度

C语言计算字符串长度 2022-0105 blog_005 方法一&#xff1a; C语言标准库中有一个函数可以计算字符串长度&#xff0c;strlen()。 方法二&#xff1a; 根据字符串总是以 ‘\0’ 结尾&#xff0c;自定义计算方法。 注意 ‘\0’ 一般是看不见的&#xff0c; ‘\0’ 也不算占用…