利用ES6的 set进行去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
利用for循环嵌套,splice去重
优点:可区分“1” 和 1
缺点 : 对象不可以去重 因为对象不可以用来比较 NaN不可以去重
let unique = arr =>{
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i] === arr[j]){
arr.splice(j,1);
j = j-1;
}
}
}
return arr
}
利用indexOf去重
优点:可区分”1” 和 1 缺点:NaN和对象 不可去重
//IndexOf()从字符串中第一个字符开始检索,返回值都是字符串中字符所在的下标,如果没有找到则返回-1
let unique = arr =>{
let array = [];
for(let i =0;i<arr.length;i++){
if(array.indexOf(arr[i]) === -1){
array.push(arr[i])
}
}
return array
}
利用sort( )去重
优点:NaN可去重 缺点:对象不可去重
//利用sort进行排序 然后进行去重
let unique = arr =>{
arr = arr.sort()
let array = [arr[0]];
for(let i =1;i<arr.length;i++){
if(arr[i] !== arr[i-1]){
array.push(arr[i])
}
}
return array
}
使用Map数据结构去重
优点:可以实现NaN去重 缺点:对象不可去重
//mapObj.set(key, value)
//key:必需,新元素的键 value:必需,要添加的元素的值
let unique = arr =>{
let map = new Map()
let array = new Array()
for(let i=0;i<arr.length;i++){
if(map.has(arr[i])){
map.set(arr[i],true)
}else{
map.set(arr[i],false)
array.push(arr[i])}
}
return array
}