JS实现数组去重的方法有哪些
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍了JS实现数组去重的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JS实现数组去重的方法有哪些文章都会有所收获,下面我们一起来看看吧。1.ES5
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
服务器排列
数据库数据变更
服务器可以改名字吗
怎么停止access数据库
徐汇区技术软件开发服务保障
数据库计算还是java计算
移动网络安全设置方法
本地无法访问FTP服务器
网络安全技术受制于人
软件开发类课题的质量管理
全球网络安全公司现状分析
高雄软件开发
北京英良网络技术公司
服务器搭建与管理结论
武汉软件开发大学
海南信息化软件开发批发价
山西忻州的dns服务器云主机
沿海地区深海数据库
云服务器端口映射本地电脑
轻薄服务器
北京网上内训软件开发
杨紫唱网络安全主题歌
一个网站数据库升级要多久
数据库计算还是java计算
网络安全与执法专业电脑配置
北京捷瑞网络技术有限公司电话
讲软件开发创业的电视剧
网络安全工作绩效考核制度
苏州机械软件开发技术指导
geo ip数据库