共计 1128 个字符,预计需要花费 3 分钟才能阅读完成。
JavaScript 实现去除数组中重复的元素
看了网上很多大神的写法,蠢蠢欲动,于是自己照着也写了几个,选出来最优的一个拿出来与大家分享一下。
准备数据
分别创建了两个长度为 10W 和 5W 的数组
然后通过 unique() 方法合并两个数组,并去掉其中的重复项
let arr1 = Array.from(new Array(100000), (x, index)=>{return index})
let arr2 = Array.from(new Array(50000), (x, index)=>{return index+index})
let start = new Date().getTime()
console.log('开始数组去重')
function unique(a, b) {// 数组去重}
console.log('去重后的长度', unique(arr1,arr2).length);
let end = new Date().getTime()
console.log('耗时', end - start);
放入去重函数并运行
首先用的是刘春龙大佬写的
arr3 = arr1.concat(arr2);
Array.prototype.unique4 = function(){this.sort();
var re=[this[0]];
for(var i = 1; i < this.length; i++)
{if( this[i] !== re[re.length-1])
{re.push(this[i]);
}
}
return re;
}
// 运行
console.log('去重后的长度', arr3.unique4().length);
let end = new Date().getTime()
console.log('耗时', end - start);
输出结果
开始数组去重
去重后的长度 100000
耗时 169
然后是 Wise.Wrong 大佬的 for…of + Object
function distinct(a, b) {let arr = a.concat(b)
let result = []
let obj = {}
for (let i of arr) {if (!obj[i]) {result.push(i)
obj[i] = 1
}
}
return result
}
输出结果
开始数组去重
去重后的长度 100000
耗时 22
最后,参照着 Wise.Wrong 大佬贴出来的写法 写了一个:
开始数组去重
去重后的长度 100000
耗时 19
这里已经将 Array.prototype.unique 汇集到了 JavaScript 常用函数库 – jutils 中去了
jutils.arrayUniq();
放入带有重复数据的数组就可以直接使用了。
参考文章
- JavaScript 高性能数组去重 – Wise.Wrong
- JS 中数组去重问题 – 刘春龙的博客
正文完
发表至: javascript
2019-09-18