JS实现数组去重的八种方法(实用)
admin
2024-01-20 07:30:30
0

前言

js数组去重是比较常见的数组操作方式之一,网上有很多关于数组去重的博客文章,方法各式各样,但有些方法实用性很差,很容易造成不必要的麻烦,所以我们需要去其糟粕取其精华,下面我们就整理一些比较实用的数组去重方法。

Methods 1:利用双重for循环

思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。

function unique(arr) {let newArr = [arr[0]];for (let i = 1; i < arr.length; i++) {let repeat = false;for (let j = 0; j < newArr.length; j++) {if (arr[i] === newArr[j]) {repeat = true;break;}}if (!repeat) {newArr.push(arr[i]);}}return newArr;
}console.log(unique([1, 1, 2, 5, 5, 3, 4, 9, 6, 3, 4]));
// 结果是[1, 2, 5, 3, 4, 9, 6]

Methods 2:利用对象

思路:利用对象属性存在的特性,如果没有该属性则存入新数组

function unique(arr) {const newArr = []const obj = {}arr.forEach(item => {if (!obj[item]) {newArr.push(item)obj[item] = true}})return newArr}console.log(unique([1, 1, 2, 5, 5, 3, 4, 9, 6, 3, 4])) // 结果是[1, 2, 5, 3, 4, 9, 6]

Methods 3:利用数组的indexOf方法

思路:新建一个空数组,遍历需要去重的数组,将数组元素存入新数组中,存放前判断数组中是否已经含有当前元素,没有则存入。此方法也无法对NaN去重。

var arr = [1,9,8,8,7,2,5,3,3,3,2,3,1,4,5,444,55,22];
function unique(arr) {//定义一个新的临时数组 var newArr=[]; //遍历当前数组 for(var i=0;i

Methods 4:利用数组的includes方法

思路:此方法逻辑与indexOf方法去重异曲同工,只是用includes方法来判断是否包含重复元素。

function unique(arr) {var newArr = []for (var i = 0; i < arr.length; i++) {if (!newArr.includes(arr[i])) {newArr.push(arr[i])}}return newArr
}
console.log(unique([1,5,1,5,3,74,32,7,32,6,9,4,7,4]));
// 结果是[1, 5, 3, 74, 32, 7, 6, 9, 4]

Methods 5:利用数组的 filter 和 includes方法

同理,filter+indexOf也可

function unique(arr) {var newArr = []newArr = arr.filter(function (item) {return newArr.includes(item) ? '' : newArr.push(item)})return newArr
}
console.log(unique([1,5,1,5,3,74,32,7,32,6,9,4,7,4]));
// 结果是[1, 5, 3, 74, 32, 7, 6, 9, 4]

Methods 6:利用数组的 forEach 和 includes方法

function unique(arr) {let newArr = [];arr.forEach(item => {return newArr.includes(item) ? '' : newArr.push(item);});return newArr;
}
console.log(unique([1,1,2,5,6,3,5,5,6,8,9,8]));
// 结果是[1, 2, 5, 6, 3, 8, 9]

Methods 7:利用数组的 splice 方法。

function unique(arr){for(var i=0;i

Methods 8:利用Set()+Array.from()

代码最简洁,原理:

  • Set对象:是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即Set中的元素是唯一的
  • Array.from() 方法:对一个类似数组可迭代对象创建一个新的,浅拷贝的数组实例。
function unique(arr){return Array.from(new Set(arr))
}var arr = [1,1,2,9,6,9,6,3,1,4,5];console.log(unique(arr))
//[ 1, 2, 9, 6, 3, 4, 5 ]

相关内容

热门资讯

股价波动较大!易点天下:15日... 【大河财立方消息】1月14日,易点天下网络科技股份有限公司(简称易点天下)公告称,公司股价波动较大,...
币圈院士:1.15比特币过关斩... 交易的根本是生存,其次才是收益,所以每次操作之前先想清楚自己的操作是否合理,本金是否安全,要形成一套...
专家解读 | 数据应用场景激活... 文 | 北京软件和信息服务业协会 国家数据局会同有关部门研究编制了《工业制造、现代农业等九个领域“数...
2026年十大危机公关公司榜单... 凌晨三点,某上市公司公关总监的手机被一条视频推送点亮。短短15秒的剪辑,将产品质量问题放大成了企业道...
原创 寒... 2025年寒冬的乌克兰,并非末日电影中的场景,而是残酷的现实。当零下十五度的凛冽寒流裹挟着鹅毛大雪,...
白银站稳90美元关口,白银矿业... 来源:环球市场播报 核心要点 现货白银价格于周二首次突破每盎司 90 美元,并在周三交易时段延续...
AI应用端全面爆发!4大黄金赛... 2026年1月14日周三的A股市场,AI应用端彻底点燃全场!浩瀚深度、壹网壹创等多只个股20CM涨停...
FXGT:平台监管合规与全球市... 本文探讨FXGT平台的核心优势,重点分析其监管合规性和全球市场连接的整合价值。通过严格的合规框架,F...
原创 1... 写在文章前的声明:在本文之前的说明:本文中所列的投资信息,只是一个对基金资产净值进行排行的客观描述,...
原创 美... 2026 年 1 月 13 日,美国多家媒体集中披露两条重磅消息,中国美债持仓降至 6887 亿美元...
融资保证金比例重回100%:A... "两融余额突破2.67万亿!"当这个数字刷屏各大财经媒体时,监管层的一纸通知瞬间引爆市场——融资保证...
靠中式精酿9个月狂卖11亿,河... 不到两年时间,一群“微醺女孩”把一家成立44年的河南地方啤酒厂推到IPO门口。 1月13日,河南金星...
原创 黄... 哈喽大家好,今天小无带大家聊聊最近刷屏的抢金热潮!金饰价格飙涨不停,一条项链一夜涨1.5万还被疯抢,...
原创 虚... 小睿就来深扒“纸上黄金”的IPO迷局,Suplay冲刺港股欲成“收藏卡第一股”,靠米哈游IP赚足利润...
北京CBD千亿规模国际级商圈初... 央广网北京1月14日消息(记者 王进文)1月14日,记者从北京市朝阳区两会新闻发布会上了解到,北京商...
原创 9... 什么样的酒能赢得市场? 2026年开年,A股市场的“分裂感”格外清晰。一边,是上证指数稳步站上410...
北方稀土设备供应商,广泰真空上... 来源丨时代商业研究院 作者丨陆烁宜 编辑丨郑琳 时隔3个月,“超长验收”项目披露的数量却翻倍,沈阳广...
热点城市启动新年“第一拍” 民... 来源:21世纪经济报道 21世纪经济报道记者 张敏 1月14日,青岛2026年首场宅地拍卖落锤。在市...
啤酒卖不动了,中式精酿能救金星... 在中国啤酒行业,已经很久没有出现真正意义上的 " 新故事 " 了。 过去十余年,这个一度被视为现金牛...
小组第二出线!U23亚洲杯-李... 北京时间1月14日消息,2026年U23亚洲杯小组赛继续进行,在D组最后一轮争夺中,中国U23男足迎...