思路:
一、首先要遍历,10种遍历方法:
while,for(),forEach,filter,
map,Array.from,
some,every,
reduce,reduceright
var arr =[1,1,2,2,3,3]
1.while
index =0
while(index <arr.length){
console.log(arr[index])
if(arr1.indexOf(arr[index])===-1){
arr1.push(arr[index])
}
index++
}
2.for
for(var i=0;i<arr.length;i++){
if(arr1.indexOf(arr[i])===-1){
arr1.push(arr[i])
}
}
3.forEach
arr.forEach(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
4 filter
arr.filter(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
5.map
arr.map(x => {
if(!(x in arr1)){
arr1.push(x)
}
return arr1
})
6 Array.from
Array.from(arr,(x) => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
return arr1
})
7some
arr.some(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
8 every
arr.every(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
9 reduce
10 reduceRight
二、内部判断7种方法:
判断是否有这个数
indexOf,lastIndexOf,includes,in
对象key值判断
Set对象
Map的key值map.get(x)
2.1
arr.forEach(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
3.1
arr.filter(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
})
4.1
arr.map(x => {
if(!(x in arr1)){
arr1.push(x)
}
return arr1
})
4.2
arr.map(x => {
if(!(arr1.includes(x))){
arr1.push(x)
}
return arr1
})
4.3
arr.map(x => {
if(arr1.indexOf(x)===-1){
arr1.push(x)
}
return arr1
})
4.4
arr.map(x => {
if(arr1.lastIndexOf(x)===-1){
arr1.push(x)
}
return arr1
})
4.5 对象的属性去重
obj ={}
arr1=[]
arr.map(x=>{
if(!obj[x]){
obj[x]=1
arr1.push(x)
}
})
4.6 Set对象唯一值
arrs=new Set()
arr.map(x=>{
if(!(arrs.has(x))){
arrs.add(x)
arr1.push(x)
}
})
4.7Map对象唯一值
var arr =[1,2,3,4,1,2,5]
var obj = new Map()
arr1=[]
arr.map(x=>{
if(!obj.has(x)){ //或者get
obj.set(x,1)
arr1.push(x)
}
})
三、
思路:先将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
10种遍历方法。
while,for,forEach,filter,map,Array.from,some,every,reduce,reduceRight
var formArr = arr.sort()
var newArr=[formArr[0]]
for (let i = 1; i < formArr.length; i++) {
if (formArr[i]!==formArr[i-1]) {
newArr.push(formArr[i])
}
四、new Set两种去重
1[…new Set(arr)]
2Array.from(new Set(arr))
总结:一共70+10+2种算法
最优的是最后2种。
运用到了ES6的集合对象,时间复杂度为O(n)。
其次是sort, 时间复杂度为O(nlogN),不过这查重会导致不会按照原有的数组进行排序,即不稳定性。
最后是其他的,都是2遍循环,所以时间复杂度是O(n²)