1. 利用ES6 Set去重
这种方法无法去掉空对象{}
function unique(arr){
return Array.from(new Set(arr))
}
var arr = [1,4,5,6,3,4,33,5,{},{}]
console.log(unique(arr)) //[1, 4, 5, 6, 3, 33, {…}, {…}]
简单写法
[...new Set(arr)]
2. 利用for嵌套for,然后用splice去重
NaN,{}不能去重
function unique(arr){
for(var i = 0; i < arr.length; i++){
for(var j = i+1, j < arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1)
j--
}
}
}
return arr
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr)) //[1, 4, 5, 6, 3, 33, {…}, {…},NaN, NaN]
3. 利用indexOf
NaN,{}不能去重
function unique(arr){
if(!Array.isArray(arr)){
return false
}
var array = []
for(var i = 0; i<arr.length; i++){
if(array.indexOf(arr[i]) === -1){
array.push(arr[i])
}
}
return array
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr)) //[1, 4, 5, 6, 3, 33, {…}, {…},NaN, NaN]
4. 利用sort
NaN,{}不能去重
function unique(arr){
if(!Array.isArray(arr)){
return false
}
arr = arr.sort()
var array = [arr[0]]
for(var i = 1; i < arr.length; i++){
if(arr[i] !== arr[i-1]){
array.push(arr[i])
}
}
return array
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr)) //[1, 4, 5, 6, 3, 33, {…}, {…},NaN, NaN]
5. 利用includes
空对象无法去重
function unique(arr){
if(!Array.isArray(arr)){
return false
}
var array = []
for(var i = 0; i<arr.length; i++){
if(!array.includes(arr[i])){
array.push(arr[i])
}
}
return array
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr))
6. 利用hasOwnProperty
这种方法可以全部去重
function unique(arr){
var obj = {}
return arr.fliter((item,index,arr) => {
return obj.hasOwnProperty(typeof item + item) ? fasle : (obj[typeof item+item] = true)
})
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr))
7. 利用filter
这种方法不能去除空对象
function unique(arr){
return arr.filter((item, index, arr) => {
return arr.indexOf(item,0) === index
])
}
var arr = [1,4,5,6,3,4,33,5,{},{},NaN, NaN]
console.log(unique(arr))
8. 利用Map数据结构
这种方法无法去除空对象
function 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
}