数组去重方法

不管是在面试中还是在实际开发中我们经常见到数组去重,在这里小白为大家总结了一些去重的方式

-------------------------- 大家有好的方法可以分享 -------------------

1. 利用indexOf去重

 let arr = [1,2,2,3,2,2,1,1,2,3];
        // indexOf
        //数组去重
        function noRepeatArr(arr){
            let list = [];
            for(let i = 0,len = arr.length;i < len;i ++){
                if(list.indexOf(arr[i]) === -1){
                    list.push(arr[i]); //[1,2,3]
                }
            }
            return list;
        }
noRepeatArr(arr)//[1,2,3]

2. 利用数组下标来判断

     //数组下标判断法
    function unique3(array){
        var n = [array[0]]; //结果数组
        for(var i = 1; i < array.length; i++) { //从第二项开始遍历
            if (array.indexOf(array[i]) == i) 
                n.push(array[i]);
        }
        return n;
    }

3. Set天然去重

//ES6
es6方法数组去重
arr=[...new Set(arr)];
//es6方法数组去重,第二种方法
function dedupe(array) {
  return Array.from(new Set(array));       //Array.from()能把set结构转换为数组
}

4. 过滤判断下标方法

//这个方法是偶然间在网上看到的
// let arrChong = [1,2,3,2,4,5,1]
// let arrc = arrChong
arrChong = arrChong.filter((item,index)=>{
    return arrc.indexOf(item,0) === index
})
arrChong // [1,2,3,4,5]

数组中对象去重

5. 通过对象.属性的方式来判断对象中是否存在key

var arr = [{"key":"小靳靳"}, {"key":"小靳靳"}, {"key":"小帅"}, {"key":"小帅03"}, {"key":"小帅"}];
var arrs = [];
var obj = {};
    for (var i = 0; i < arr.length; i++) {
        if (!obj[arr[i].key]) {
            arrs.push(arr[i]);
            obj[arr[i].key] = true;
        }
    }
    console.log(arrs)

6. 通过findIndex查找key值

var arr = [{"01":"小靳靳"}, {"01":"小靳靳"}, {"02":"小帅"}, {"03":"小帅03"}, {"02":"小帅"}];
var arrs = [];
    arr.map((item)=>{ //遍历数组
        let index = arrs.findIndex((items)=>{ //查找key值,找不到返回-1
            return items[Object.keys(items)] ==  item[Object.keys(item)]
        })
        if(index == -1){
            arrs.push(item)
        }
    })

7. new map方法

// 数组对象去重
let arr = [
    {
        "name": "安徽省"
    },
    {
        "name": "安徽省"
    },
    {
        "name": "山西省"
    }
]
const map = new Map();
for ( const item of arr ) {
    if ( !map.has( item.name ) ) {   //判断是否存在
        map.set( item.name, item );  //设置属性,属性值
    } 
}
console.log( [...map.values()]) //[{name: '安徽省'},{name: '山西省'}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_JSJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值