数组去重的方法

个人整理几种数组去重的方法

1、 用arr.reduce()+includes方法

let arr = [11,9,11,3,55,6,9,1008,3,7,7];
// 这个写法不能用push因为返回的是数组的长度 如果返回的是rec 则可以用这个方法
function once(arr){
   return arr.reduce((rec,dec)=>{
      return rec.includes(duc)? rec : rec.concat
   },[])
}
console.log(once(arr)) // [11, 9, 3, 55, 6, 1008, 7]

2、用ES6的 new Set() 方法

// new Set 储存任何类型的唯一值  得到一个新的set对象  会自动去重
let model = [11,9,11,3,55,6,9,1008,3,7,7];

function once(arr){
    let obj = new Set(arr)

    // 用 Array.from() 转化成数组
    // return  Array.from(obj) 

    // 用解构赋值转化成数组 
    // return [...obj]

    // 用Object.values() 转化成一个数组
    let itera = obj.values(); // 返回一个set迭代器对象
    let arr4 = [];
    for(key of itera){
        arr4.push(key)
    }
    return arr4
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7]
// 第二种方法
let model = [11,9,11,3,55,6,9,1008,3,7,7];
function once(arr){
    let set = new Set()
    let newArr = [];
    arr.map((item,index)=>{
        if(!set.has(item)){
            set.add(item)
        }
    })
    return [...set]
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7] */

3、嵌套for循环+splice

// 如果数组中有NaN {} [] NaN不等于NaN  对象也不等于对象因为地址不一样 只有Object.is(NaN, NaN) 返回的是true
let model = [11,9,11,3,55,6,9,1008,3,7,7];
let model2 = ['1','2','s',1,'2',[],[],'a','b','b',{},{},NaN,NaN,null,null,undefined,undefined]
function once(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);
            }
        }
    }
    return arr
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7]
console.log(once(model2)) // ["1", "2", "s", 1, Array(0), Array(0), "a", "b", {…}, {…}, NaN, NaN, null, undefined]

4、for + includes + push()

function once(arr){
    let arr2 = [];
    for(let i =0; i<arr.length; i++){
        if(!arr2.includes(arr[i])){
            arr2.push(arr[i])
        }
    }
    return arr2
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7]

5、forEach+includes+push

let model = [11,9,11,3,55,6,9,1008,3,7,7];
function once(arr){
    let arr2 = [];
    if(!Array.isArray(arr)) return
    arr.forEach((item, index) => {
        if(!arr2.includes(item)){
            arr2.push(item)
        }
    });
    return arr2
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7]

6、filter + indexOf

let model = [11,9,11,3,55,6,9,1008,3,7,7];
function once(arr){
    if(!Array.isArray(arr)) return
    return arr.filter((item, index)=>{
        // 遍历出元素第一次出现的下标与当前下标相等的 就是新的数组元素
        return arr.indexOf(item) == index
    })

}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7]

7、 for+indexOf+push

let model = [11,9,11,3,55,6,9,1008,3,7,7];
function once(arr){
    if(!Array.isArray(arr)) return
    let arr2 = [];
    for(let i = 0; i<arr.length; i++){
        /* if(arr.indexOf(arr[i]) == i){
            arr2.push(arr[i])
        } */
        // 或者
        if(arr2.indexOf(arr[i]) == -1){
            arr2.push(arr[i])
        }
    }
    return arr2
}
console.log(once(model)) // [11, 9, 3, 55, 6, 1008, 7] */

 去重的方法

1、arr.reduce()+includes

2、new Set()

3、嵌套for循环+splice

4、for + includes + push()

5、forEach+includes+push

6、filter + indexOf

7、for+indexOf+push

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值