JavaScript 高性能数组去重
一、创建测试模板
分别创建两个数组长度为10W和5W的数组,再通过distinct()方法合并两个数组,并去掉重复项
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 distinct(a, b) {
// 数组去重
}
console.log('去重后的长度', distinct(arr1, arr2).length)
let end = new Date().getTime()
console.log('耗时', end - start)
二、ES6新增了Set属性,基于这个特性我们可以效率去重数组
function distinct(a, b) {
return Array.from(new Set([...a, ...b]))
}
处理15W的数据消耗时间
在两个数组长度后面分别加个0,在150W的数据下
三、for...of + Object
首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复
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
}
15W的数据消耗时间
150W的数据消耗时间
人说,如果你很想要一样东西,就放它走 。如果它回来找你,那么它永远都是你的。要是它没有回来,那么不用再等了,因为它根本就不是你的。
——伊恩·麦克尤恩