数组去重。。。。

数组去重两种思路:

1.在原有数组基础上进行去重
2.申请新的数组进行去重操作

原有数组上进行操作:

  1. es6 set方法去重
function unique(arr){
    return Array.from(new Set(arr))
}
  1. splice直接去重
function unique2(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
}
  1. 利用hasOwnProperty判断是否存在对象属性
function unique5(arr) {
    let obj={}
    return arr.filter(function (item,index,arr) {
        return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item+item]=true)
      })
}
  1. 利用好filter去判断当前元素是否等于原始数组中出现的第一个索引值
function unique6(arr) {
    return arr.filter(function (item,index,arr) {
        return arr.indexOf(item,0)===index
    })
}

申请新的数组去重操作

  1. indexOf判断
function unique1(arr) {
    if(!Array.isArray(arr)){
        return 0
    }
    let result=[];
    for(let i=0;i<arr.length;i++){
        if(result.indexOf(arr[i])===-1){
            result.push(arr[i])
        }
    }
    return result
}
  1. 排序,相邻进行操作
function unique3(arr){
    if(!Array.isArray(arr)){
        return 0
    }
    arr.sort((a,b)=>{
        return a-b
    });
    let result=[arr[0]]
    for(let i=1;i<arr.length;i++){
        if(arr[i]!==arr[i-1]){
            result.push(arr[i])
        }
    }
    return result
}
  1. 利用对象的属性不能相同的特点进行去重
function unique4(arr) {
    if(!Array.isArray(arr)){
        return 0
    }
    let result=[]
    let obj={}
    for(let i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            result.push(arr[i])
            obj[arr[i]]=1
        }else{
            obj[arr[i]]++
        }
    }
    return result
}
  1. map数据结构去重
function unique7(arr) {
    let map=new Map()
    let result=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)
            result.push(arr[i])
        }
    }
    return result;
}

结束。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章