循环去重
1、普通的for循环,或用include (效率比较低)
1 var arr1=[1,5,2,3,4,1,5,3,4]
2 var arr2 = [];
3 for (var i = 0; i < arr1.length; i++) {
4 if (arr2.indexOf(arr1[ i ])==-1) {
5 arr2.push(arr1[ i ])
6 }
7 }
或用includes
function distinct(arr) {
let result = []
for (let item of arr) {
!result.includes(item) && result.push(item)
}
return result
}
2、Array.filter() + indexOf 通过判断下标(效率比较低)
function distinct(arr) {
return arr.filter((item, index)=> {
return arr.indexOf(item) === index
})
}
3、双重 for 循环 (效率也比较低)
function distinct(arr) {
for (let i=0, len=arr.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
// splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
len--;
j--;
}
}
}
return arr
}
4、Array.sort() 效率稍高些
function distinct(arr) {
arr = arr.sort()
let result = [arr[0]]
for (let i=1, len=arr.length; i<len; i++) {
arr[i] !== arr[i-1] && result.push(arr[i])
}
return result
}
5、ES6中的 new Set() 效率比较高
function distinct(arr) {
return Array.from(new Set(arr))
}
var arr=[1, 2, 3, 3, 3, '0', '1', '2',1]; arr=[...new Set(arr)];
6、for...of + Object 利用对象的属性不会重复这一特性,校验数组元素是否重复 效率最高
function distinct(arr) {
let result = []
let obj = {}
for (let item of arr) {
if (!obj[item]) {
result.push(item)
obj[item] = 1
}
}
return result
}

浙公网安备 33010602011771号