欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS中去除数组中重复元素的方法

程序员文章站 2022-06-11 16:17:50
...

JS中去除数组中重复元素的方法

第一种方法:使用数组中的splice方法

splice():删除元素,并向数组添加新元素,并返回被删除的元素

function f1(){
        var _arr=[8,5,0,3,1,8,5,0,3,1,8,8,8,5,2,2,2];
        for(n=0;n<_arr.length-1;n++){//循环数组的所有元素
            for(i=n+1; i<_arr.length;i++){//拿下标为n的元素和它后面的所有元素进行比较
                if(_arr[n]==_arr[i]){//如果第i位上的元素和第n上的元素相等就删除
                    _arr.splice(i--,1);//使用splice方法删除重复的元素
                    /**使用i--的原因
                     *splice()方法两个参数的含义:
                     *第一个参数是从下标为多少的位置开始
                     *第二个参数是从开始的位置往后删除几个元素
                     *例如splice(1,2)就是从下标为1的地方开始向后删除2个元素
                     *使用i--是因为:
                     *假如用下标为0的8与后边的元素进行比较,
                     *当和第二个8进行比较时,这时需要把这个8删除,此时i=5
                     *如果是_arr.splice(5,1)的话删除的是8后面的数,而不是8
                     *所以要用i--,把5变为4,此时删除的就是8了
                    */
                }
            }
        }
        console.log(_arr);//输出[8,5,0,3,1,2]
      }
      f1();

第二种方法:使用indexOf()

indexOf():用来检测指定的子字符串值在字符串中首次出现的位置,

这种方法较简单,但是低版本浏览器可能不兼容indexOf()方法

indexOf()方法如果要检索的字符串没有出现,则返回-1

function f2(){
            var _arr=[8,5,0,3,1,8,5,0,3,1,8,8,8,5,2,2,2];
            var _empty=[];//声明一个空数组
            for(n=0;n<_arr.length;n++){//循环_arr数组中元素
                //判断_empty数组中是否有_arr数组中的第n个元素,小于0就是没有
                //如果没有就把这个元素添加到_empty数组中
                if(_empty.indexOf(_arr[n])<0){
                    _empty.push(_arr[n]);//push()也是数组中的一个方法,用来向数组的末尾添加元素
                }
                
            }
             _arr=_empty;//把数组_arr赋值为_empty,也可以直接输出_empty
             console.log(_arr);//输出[8,5,0,3,1,2]
      }
      f2();
第三种方法:兼容第二种写法
function f3(){
       var _arr=[8,5,0,3,1,8,5,0,3,1,8,8,8,5,2,2,2];
       var _empty=[];
       var _flag=0;//声明一个变量用来做标记,初始值为0
        for(n=0; n<_arr.length; n++){//循环_arr数组
            for(i=0; i<_empty.length; i++){//循环数组_empty
                //使_arr中的第n个元素和_empty中的每一个元素进行比较
                if(_arr[n]==_empty[i]){
                    _flag=1;//如果_arr中第n个元素和_empty中的某个元素相等,就给标记_flag赋值为1
                    break;//如果有一个相等的就可以结束循环了
                }
                
            }
            if(_flag==0){//如果_flag==0,即_arr数组中的元素和_empty中的每个元素都不相等
                _empty.push(_arr[n]);//把这个元素添加到_empty中
            }
            _flag=0;//每次对_empty循环完毕都需要把标记_flag的值初始为0
        }
        _arr=_empty;//把_empty赋值给_arr,也可以直接打印_empty
        console.log(_arr);//输出[8,5,0,3,1,2]
      }
      f3();