方法一:利用ES6set去重
function unique (arr){
return Array.from(new set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}]
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
注意:NaN和undefined都可以被存储在Set 中, NaN之间被视为相同的值(尽管 NaN !== NaN)
方法二:利用indexOf方法
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
var array=[]
for(let i=0;i<arr.length;i++){
if(array.indexOf(arr[i])===-1){
array.push(arr[i])
}
}
return array
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))//同样NAN和{}无法去重
方法三:先排序,后判断相邻值是否相等
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error')
return
}
var arr=arr.sort()
var array=[arr[0]]
for(let i=1;i<arr.length;i++){
if(arr[i]!==arr[i-1]){
array.push(arr[i])
}
}
return array
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
方法四:利用for嵌套for,然后splice去重(es5 中最常见)
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(j,1)
j--
}
}
}
return arr
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
网友评论