JS实现数组去重的方法有哪些
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍了JS实现数组去重的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS实现数组去重的方法有哪些文章都会有所收获,下面我们一起来看看吧。1.ES5
千家信息网最后更新 2025年11月15日JS实现数组去重的方法有哪些
这篇文章主要介绍了JS实现数组去重的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS实现数组去重的方法有哪些文章都会有所收获,下面我们一起来看看吧。
1.ES5常用:利用for嵌套for,然后splice去重
function unique(arr) { for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { //第一个等同于第二个,splice方法删除第二个 arr.splice(j, 1); j--; } } } return arr; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:两个null消失,NaN和{}没有去重
2.ES6常用:Set去重
function unique(arr) { return Array.from(new Set(arr)) } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))
解析:去重代码少。但是无法去除{}空对象。
3.indexOf去重
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = [];//新建空数组,for循环原数组,判断数组是否存在当前元素,如果相同的值跳过,不同push进数组 for (var i = 0; i < arr.length; i++) { if (array.indexOf(arr[i]) === -1) { array.push(arr[i]) } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:NaN、{}没有去重
4.sort()排序
//排序后的结果,遍历对比 function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } arr = arr.sort() var arrray = [arr[0]]; for (var i = 0; i < arr.length; i++) { if (arr[i] !== arr[i - 1]) { arrray.push(arr[i]); } } return arrray } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:NaN、{}没有去重
5.对象属性不能相同(不建议)
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = []; var obj = {}; for (var i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { array.push(arr[i]) obj[arr[i]] = 1 } else { obj[arr[i]]++ } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:两个true去掉,NaN和{}没有去重
6.includes()
function unique(arr) { if (!Array.isArray(arr)) { console.log('type error!') return } var array = []; for (var i = 0; i < arr.length; i++) { if (!array.includes(arr[i])) { //includes 检测数组是否有某个值 array.push(arr[i]); } } return array } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:{}没有去重
7.hasOwnProperty
function unique(arr) { var obj = {}; return arr.filter(function(item, index, arr){ return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true) })}解析:所有都去重
8.filter
function unique(arr) { return arr.filter(function (item, index, arr) { //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素 return arr.indexOf(item, 0) === index; }); } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:{}没有去重、NaN两个都没有了
9.利用递归去重
function unique(arr) { var array = arr; var len = array.length; array.sort(function (a, b) { //排序后更加方便去重 return a - b; }) function loop(index) { if (index >= 1) { if (array[index] === array[index - 1]) { array.splice(index, 1); } loop(index - 1); //递归loop,然后数组去重 } } loop(len - 1); return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr))解析:NaN和{}没有去重
10.Map去重
function arrayNonRepeatfy(arr) { let map = new Map(); let array = new Array(); // 数组用于返回结果 for (let i = 0; i < arr.length; i++) { if (map.has(arr[i])) { // 如果有该key值 map.set(arr[i], true); } else { map.set(arr[i], false); // 如果没有该key值 array.push(arr[i]); } } return array; } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(arrayNonRepeatfy(arr))解析:创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果。{}空对象无法去重。
11.reduce+includes
function unique(arr) { return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []); } var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {} ]; console.log(unique(arr));解析:{}无法去重
关于"JS实现数组去重的方法有哪些"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"JS实现数组去重的方法有哪些"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
数组
方法
元素
相同
两个
对象
知识
结果
排序
内容
常用
篇文章
索引
递归
不同
原始
代码
价值
就是
属性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络游戏服务器pin值
怎么启动帐套管理服务器
软件开发公司挂靠
视频安防软件开发报价
系统集成 软件开发 选哪个
魔兽数据库掉落文件
跨境网络安全上市公司
模拟器怎么玩小米服务器游戏
重装上阵服务器炸服视频
数据库表空间加数据文件
卢龙app软件开发公司
无线传感器网络技术的讨论
华为服务器的制成工厂
浙江工业软件开发大概多少钱
电脑服务器登录失败无法加载用户
mysql插入数据库乱码
杀毒软件开发商江民
软件开发工程师的认证
铁路网络技术服务中心
BHS服务器
榜样app软件开发
数据库索引区别
邢台租房软件开发
服务器为什么分配不了ip地址
erp系统怎样安装数据库
怎么样做好网络安全工作
怀柔区标准软件开发服务供应
网络安全 就业前景分析报告
服务器实物
海南网络技术转让诚信为本