JS js实现数组以及字符串去重的方法

一.new Set

set数据类型不允许有重复数据,会自动清除重复数据;
通过合并展开运算符…对set类型转化为数组操作.

var arr=[1,2,3,1,2,3,1,2,3];
var set=new Set(arr);
newArr=[...set];
console.log(newArr);

二.创新数组查询判断加入

创建一个新数组,是一个空数组[]
循环遍历原始数组
将 原始数组的数据 通过 数组.push() 方法 写入到新数组中;
使用 indexOf 在 新数组中 查询要写入的数组数据;
如果 结果是 -1 证明 新数组中没有原始数组的数据;
再触发执行写入操作.

var arr=[1,2,3,1,2,3,1,2,3];
       var new1=[];
       for(i=0;i<=arr.length-1;i++){
           if(new1.indexOf(arr[i])===-1){
               new1.push(arr[i]);
           }
       }
    document.write( new1 );

三.原数组前后查询比较删除

遍历数组,分别查询第一次出现该元素的索引下标,以及最后一次出现该元素的索引下标;
比较两个下标大小是否相等,如果相等,说明该元素无重;
如果不等则说明有重复,则去掉后出现的,并且为了防止数组塌陷,对循环变量进行处理;

var arr=[1,2,3,1,2,3,1,2,3];
    for(i=0;i<=arr.length-1;i++){
        var a=arr.indexOf(arr[i]);
        var b=arr.lastIndexOf(arr[i]);
        if(a===b){
            continue;
        }else{
            arr.splice(b,1);
            i--;
        }
    }
    document.write( arr );

四.双重for循环遍历去重

每次循环 是 当前循环单元 和 之后的所有单元进行比较;
如果 起始单元的数据 和 之后单元的数据 相同 删除 之后单元的数据;

1, 外层循环 从第一个单元 至 倒数第二个单元
2, 内层循环 从 当前循环起始单元的下一个单元 至 最后一个单元
3, 如果 当前循环起始单元存储的数据 和 之后循环单元存储的数据相同
删除 之后循环的单元

var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
        for (j = 0; j <= arr.length - 1; j++) {
            for (i = j + 1; i < arr.length; i++) {
                if (arr[j] === arr[i]) {
                    arr.splice(i, 1);
                    i--;
                }
            }
        };
console.log(arr);

五.利用对象不能存储重复属性的特点

方法1: 循环遍历对象

1, 创建一个空对象 创建一个空数组
2, 循环遍历数组
将 数组单元的数据 作为 对象的属性 新增对象的单元
存储的数据是任意什么数据都可以
3, 循环遍历对象 将 对象的属性作为数据 存储到空数组中
数组.push()

 var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
        var obj = {};
        var arr2=[];
        for(i=0;i<arr.length;i++){
                obj[arr[i]]=1;
        }
        for(value in obj){
            arr2.push(value*1);//转化为数值类型写入新数组
        }
        console.log(arr2);

方法二:遍历数组,将其作为键名存入对象中,对对象中键名的进行判断,当其内容不在对象中时,将其存入,并将其存入新数组中.

var arr = [1, 2, 3, 1, 2, 3, 1, 2, 3];
        var obj = {};
        var arr2=[];
        for(i=0;i<arr.length;i++){
            if(!(obj[arr[i]])){
            //当obj中没有arr[i]时,obj[arr[i]]===undefined;转化为布尔值为false,前面加个非判断符!转为true(即当obj中没有arr[i]时,进行写入新数组的操作)
                obj[arr[i]]=1;
                arr2.push(arr[i]);
            }
        }
        console.log(arr2);

字符串去重

由于字符串可以直接转为数组,去重后,再转为字符串.所以前几种方法,均可用
转化方法:

var str=`123456123456`;
var arr=str.split('');
//此处为去重方法
var obj = {};
var arr2=[];
        for(i=0;i<arr.length;i++){
            if(!(obj[arr[i]])){
                obj[arr[i]]=1;
                arr2.push(arr[i]);
            }
        }
//以上为去重方法
var newStr=arr2.join();
console.log(newStr);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值