js数组去重的方法

第一种 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)

你可能感兴趣的:(js数组去重的方法)