算法之数组去重

indexOf

利用数组的实例方法indexOf 方法
indexOf:检测当前数组对象中是否包含了指定的元素,包含返回索引,否则-1
语法:数组.indexOf(key)
思路:遍历原数组,将原数组中的每个元素逐个判断并添加到新的数组中
如果新数组中已经存在了即将添加的值,就不再添加,只添加没有的元素

		var arr = [1,2,1,2,1,2,1,2,1,2,1,1,1,1];
        function unique(arr){
            if(!Array.isArray(arr)){
                return;
            }
            const LEN = arr.length;
            if (LEN === 0) {
                return;
            }
            var newArr = [];
            for (let i = 0; i < LEN ; i++) {
                if (newArr.indexOf(arr[i]) === -1) {
                    newArr.push(arr[i]);                   
                }
            }
            return newArr;
        }
        console.log(unique(arr));

splice

使用数组的实例方法splice方法,直接删除原数组中的内容
splice:可以对数组实现增删改的操作
思路:遍历数组,用当前数组元素和后续的元素逐个比较,后续的元素只要和当前的元素相同就被删掉

var arr = [1,2,1,2,1,2,1,2,1,2,1,1,1,1,2,2,2];
function unique(arr){
    if(!Array.isArray(arr)){
        return;
    }
    if (arr.length === 0) {
        return;
    }
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                //j--是为了抵消j++
                arr.splice(j--,1);
            } 
        }
    }
    return arr;
}
console.log(unique(arr));

哈希

哈希去重:根据哈希数据结构的特点,哈希中的数据都是键值对数据
key+value的形式,key是具有唯一性的
实现的思路:将数组的所有的元素都作为对象的key添加到对象中,value是无所谓的
对象中的所有的key就是去重之后的结果

var arr = [1,2,1,2,1,2,1,2,1,2,1,1,1,1,2,2,2];
        function unique(arr){
            if(!Array.isArray(arr)){
                return;
            }
            const LEN = arr.length;
            if (LEN === 0) {
                return;
            }
            var obj = {};
            var newArr = [];
            //遍历数组元素
            for (let i = 0; i < arr.length; i++) {
                //如果arr[i]不是obj的key,存在的话就不用再添加
                if(!obj[arr[i]]){
                    //value值任意
                    obj[arr[i]] = "a";
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
        console.log(unique(arr));

ES6 …(扩展运算符)和set

let arr = [10,20,30,40,50,30,40,60];
let s = [...new Set(arr)];
console.log(s);//[10, 20, 30, 40, 50, 60]

扩展运算符

扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值