js中数组的
数组去重
常用的数组去重方法以及效率分析:
首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000。具体的生成数组的方法如下:
function buildDataArr (size) {
var array = [];
for (var i =0; i< size; i++) {
var num = Math.round(Math.random() * size);
array.push(num);
}
return array;
}
var arr1 = buildDataArr(1000);
var arr2 = buildDataArr(10000);
var arr3 = buildDataArr(100000);
var arr4 = buildDataArr(500000);
-
通过使用filter和index 方法进行去重
function distinct(numberArr) {
return numberArr.filter((item, index)=> {
return numberArr.indexOf(item) === index
})
} -
通过使用双重循环进行数组去重
function distinctFor(numberArr) {
for (let i=0, len=numberArr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (numberArr[i] == numberArr[j]) {
numberArr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return numberArr
} -
通过使用for…of 和include进行去重
function distinctInclude(numberArr) {
let result = []
for (let i of numberArr) {
!result.includes(i) && result.push(i)
}
return result
} -
使用sort进行去重
function distinctSort(numberArr) {
numberArr = numberArr.sort()
let result = [numberArr[0]] for (let i=1, len=numberArr.length; i<len; i++) {
numberArr[i] !== numberArr[i-1] && result.push(numberArr[i])
}
return result
} -
使用 new Set进行去重
function distinctSet(numberArr) {
return Array.from(new Set(numberArr))
} -
使用对象进行去重
function distinctObj(numberArr) {
let result = []
let obj = {}
for (var i of numberArr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
好了上面的方法介绍完了,我们来看一下性能:
1000 | 10000 | 100000 | 500000 | |
---|---|---|---|---|
distinctFilter | 0 | 40 | 3992 | 105859 |
distinctFor | 2 | 59 | 5873 | 147234 |
distinctInclude | 1 | 24 | 2320 | 54794 |
distinctSort | 1 | 8 | 69 | 264 |
distinctSet | 0 | 1 | 12 | 78 |
distinctObj | 1 | 1 | 9 | 33 |