第一种 ES6 中new set
var a = [1,2,3,4,4,5,5,7,8,8,9,10]
var newa = Array.from (new Set(a))
console.log(newa) // [1,2,3,4,5,7,8,9,10]
第二种 利用indexof
var a = [1,2,3,4,4,5,5,7,8,8,9,10]
function unique(arr){
var newarr = []
for(let item of arr){
if(newarr.indexOf(item) ==-1){
newarr.push(item)
}
}
return newarr
}
var newa = unique(a)
console.log(newa) // [1,2,3,4,5,7,8,9,10]
第三种 利用对象的key值唯一的特性
var a = [1,2,3,4,4,5,5,7,8,8,9,10]
function unique(arr){
var newarr = []
var objtmp = {}
for(let item of arr){
if(!objtmp[item]){
newarr.push(item)
objtmp[item] = 1
}
}
return newarr
}
var newa = unique(a)
console.log(newa) // [1,2,3,4,5,7,8,9,10]
第四种 利用includes()
var a = [1,2,3,4,4,5,5,7,8,8,9,10]
function unique(arr){
var newarr = []
for(let item of arr){
if(!newarr.includes(item)){
newarr.push(item)
}
}
return newarr
}
var newa = unique(a)
console.log(newa) // [1,2,3,4,5,7,8,9,10]
第五种 利用hasOwnProperty,返回的keys为字符串的形式
var a = [1,2,3,4,4,5,5,7,8,8,9,10]
function unique(arr){
var newarr = []
var objtmp = {}
for(let item of arr){
if(!objtmp.hasOwnProperty(item)){
objtmp[item] = 1
newarr.push(item)
}
}
//return Object.keys(newarr)
return newarr
}
var newa = unique(a)
console.log(newa) // [1,2,3,4,5,7,8,9,10]
第六种 利用splice
var arr = [1,2,3,4,3,2,3,4,6,7,6];
console.log(arr)
function 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(arr[j],1)
j--;
i--;
}
}
}
}
unique(arr)
console.log(arr)
第七种 利用filter和indexOf
var arr = [1,2,3,4,3,2,3,4,6,7,6];
console.log(arr)
function unique(arr){
return arr.filter((item,index)=>{
return arr.indexOf(item) === index
})
}
var arr2 = unique(arr)
console.log(arr2)
console.log(arr)
第八种 利用两层for循环和break,第二层的j不能用let定义
var arr = [1,2,3,4,3,2,3,4,6,7,6];
function unique(arr){
let result = []
for(let i = 0;i
第九种 扩展运算符(...)
var arr = [1,2,3,4,3,2,3,4,6,7,6];
function unique(arr){
return [...new Set(arr)]
}
var arr2 = unique(arr)
console.log(arr2)
console.log(arr)
第十种 利用reduce 和 includes,reduce中第一函数不能加{}
var arr = [1,2,3,4,3,2,3,4,6,7,6];
function unique(arr){
return arr.reduce((pre,cur)=>pre.includes(cur) ? pre : [...pre,cur],[])
}
var arr2 = unique(arr)
console.log(arr2)
console.log(arr)
// reduce的用法
// 语法格式如下:
// array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
// 其中function(total,currentValue, index,arr)中,
// total 必需。初始值, 或者计算结束后的返回值。
// currentValue 必需。当前元素
// currentIndex 可选。当前元素的索引
// arr 可选。当前元素所属的数组对象。
第十一种 利用filter和map数据结构去重
var arr = [1,2,3,4,3,2,3,4,6,7,6];
function unique(arr){
let seen = new Map()
return arr.filter(item=>{
return !seen.has(item) && seen.set(item,1)
})
}
var arr2 = unique(arr);
console.log(arr2)
console.log(arr)