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 ]

相关内容

热门资讯

ST中装:公司主要银行账户已全... 证券之星消息,ST中装(002822)06月24日在投资者关系平台上答复投资者关心的问题。 投资者提...
2026年开窗机行业趋势与战略... 一、开篇引言:市场格局重塑下的选择逻辑 步入2026年,全球建筑智能化与绿色节能政策的叠加驱动,使开...
资金全面转向科技,传统消费企业... 近期 A 股出现明显风格切换,老牌消费资金持续流出,机构与传统上市公司纷纷加码半导体、算力赛道。 先...
合肥保利翡翠天奕具体交房时间是... 对于众多购房者而言,“合肥保利翡翠天奕具体交房时间是什么时候?能按时交房吗?”是心中最关切的问题。根...
港股风向标|恒指连续杀跌后企稳... 财联社6月24日讯(编辑 冯轶)今日港股短线企稳,三大指数集体收涨。截至收盘,恒生指数涨0.33%,...
瑞众人寿达州中支被罚17万,涉... 蓝鲸新闻6月24日讯,近日,国家金融监督管理总局达州监管分局发布行政处罚决定书,剑指瑞众人寿保险有限...
美国最担心的事还是来了,中国加... 最近这段时间,国际金融圈子里有一笔账,算得各家央行心里都不太踏实。 截至2026年春季,美国国债总规...
马斯克,不是万亿富豪了 资产历史性超过万亿美元不到两周,特斯拉、SpaceX掌门人埃隆·马斯克的身价近日快速下跌。 据中新经...
突发!金价跌破4000美元,近... 每经记者:杜宇 记者|杜宇 编辑|何小桃 杜恒峰 校对|金冥羽 金银价格大跳水。 6月24日晚,现货...
粗粮吃越多越好?很多糖友吃错升... 控糖圈一直流传多吃粗粮稳血糖,不少糖友直接三餐全吃粗粮、顿顿杂粮,不仅胃胀消化不良,餐后血糖反而不降...
持续大跌!刚刚,黄金跌破400... 潮新闻客户端 记者 吴恩慧 6月24日,贵金属再次大跌。 截至发稿时,现货黄金大跌近3%,跌破400...
2026年安徽白酒代加工/贴牌... 一、行业背景与痛点引入 白酒代加工领域正经历结构性变革。据行业观察,2025年至2026年,中小酒企...
曾在次贷危机中取得900%收益... 来源:环球市场播报 对冲基金经理Lee Robinson在全球金融危机期间曾凭借及时做空美国次级抵押...
基金“业界良心”又吹哨?杨东旗... 图片来源:图虫创意 “A股大量的热门股票,未来极有可能跌掉八成乃至九成以上,我们不敢再参与了。”6月...
浙江稠州商业银行护航“两司两员... 近年来,随着平台经济、共享经济蓬勃兴起,货车司机、网约车司机、快递员、外卖配送员(以下简称:两司两员...
IPO研究 | 中国日均Tok... 瑞财经 王敏 6月22日,河南鑫宇光科技股份有限公司(以下简称“鑫宇科技”)北交所IPO获受理,保荐...
IPO定向松绑,难道硬科技无动... 睡前和大家唠两句,最近市场藏着不少容易被忽略的动向,值得好好捋捋。本篇为大家准备了4条要闻,都是实打...
Kalshi首席执行官称预测交... 来源:环球市场播报 核心要点 Kalshi首席执行官塔雷克・曼苏尔在消费者新闻与商业频道《财经早...
韩国科技股暴跌点燃全球抛售潮 在全世界范围内, AI资本神话遭遇微观与宏观的双重审视 文|《财经》特约撰稿人 金焱 发自华盛顿 编...
审计署通报!中国银行逃税23.... 6月23日,审计署发布《国务院关于2025年度中央预算执行和其他财政收支的审计工作报告》,在报告中的...