前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组去重

数组去重

作者头像
一觉睡到小时候
发布2019-07-03 17:43:00
3K0
发布2019-07-03 17:43:00
举报
文章被收录于专栏:国产程序员国产程序员

利用两个for循环和push方法

思路:利用两个for循环.遍历数组中的每一项,对每一项又遍历这项后面的每一项。也就是将当前元素与他后面的所有元素作比较,只要碰到与当前元素相等的情况,利用j = ++i重新开始外层大循环。直到其后面没有重复的元素就push进新数组

代码语言:javascript
复制
    <script type="text/javascript">
        function distinct(arr){
            var result = [],
            len = arr.length;
          for(var i = 0; i < len; i++){
            for(var j = i + 1; j < len; j++){
                if(arr[i] === arr[j]){
                    j = ++i;//i和j分别加1,外层大循环重新开始
                }
            }
            result.push(arr[i]);
          }
         return result;
        }
        var arra = [1,2,3,4,4,1,1,2,1,1,1];
        console.log(distinct(arra));    //返回[3,4,2,1]
    </script>

利用两个for循环和splice方法

思路 对数组中的每一项,与该项后面的每一项比较,若相同,就删掉后面的相同项

代码语言:javascript
复制
    <script type="text/javascript">
         function distinct(arr){
            var len = arr.length;
            for(var i = 0; i < len; i++){
                for(var j = i + 1; j < len; j++){
                if(arr[i] == arr[j]){
                     arr.splice(j,1);
                     len--;
                     j--;// 进行下一次遍历
                }
            }
            }
             return arr;
        };
        var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
        var b = distinct(a);
        console.log(b); //1,2,3,4,5,6,56
    </script>

利用sort和splice

思路:先用sort方法将数组排序,然后在老数组中循环遍历,将当前项与他的后一项比较,如果相等就删除当前项,并且进行i--和len--继续遍历

代码语言:javascript
复制
    <script type="text/javascript">
        function distinct(arr) {
            var len=arr.length;
            arr.sort((a,b) => a - b ); // 对数组进行排序
            for(var i = 0;i < len;i ++ ){
                if(arr[i] == arr[i+1]){
                    arr.splice(i,1); // 删掉当前项
                    len--;
                    i--;
                }
            }
            return arr;
        };
        var arra = [1,2,3,4,4,1,1,2,1];
        var b = distinct(arra);
        console.log(b); // [1,2,3,4]
    </script>

利用对象属性的不重复性

思路:利用对象的属性不能相同的特性.将数组中的每一项当做对象的属性名,属性名是不可以重复的。新建一个对象obj,遍历数组中的每一项,如果!obj[arr[i]]为true,就将该值push进结果数组

代码语言:javascript
复制
    <script type="text/javascript">
        function distinct(arr) {
            var i;
            var obj = {};
            var result = [];
            var len = arr.length;
            for(i = 0;i < len;i ++){
                if(!obj[arr[i]]){
                    obj[arr[i]] = 1;//通过变量访问属性,用[]
                    result.push(arr[i]);
                }
            }
            console.log(obj);
            return result;
        };
        var a = [1,4,6,4,4,4,4,4,6,1,1]
        var b = distinct(a);
        console.log(b); // [1,4,6]
    </script>

利用indexOf和push

思路:对于老数组中的每一项,在新数组中进行查找,如果没有(返回-1),push进去

代码语言:javascript
复制
    <script type="text/javascript">
         function distinct(arr) {
            var i;
            var len = arr.length;
            var res = [];
            // for(i = 0;i < len;i ++){
            //  if(res.indexOf(arr[i]) === -1){
            //      res.push(arr[i]);
            //  }
            // }
            // 可以用forEach(或者map\filter)代替上面的for循环,注意传入的函数的三个参数分别为item,index,array
            arr.forEach(function(item){
                if(res.indexOf(item) === -1){
                    res.push(item);
                }
            })
            return res;
        };
        var arra = [1,2,4,2,1,24,4,3,4,2,1,3,3];
        var arrb = distinct(arra);
        console.log(arrb);
    </script>

利用set对象和拓展运算符

思路:ES6中的set是一个类似于数组的对象,其属性不能重复。利用Array.from或者拓展运算符将其转化为数组

代码语言:javascript
复制
    <script type="text/javascript">
        function distinct(array){
            // return Array.from(new Set(array));
            return [... new Set(array)]//用[...A]将A转换为数组
        }
        var arr1 = [2,1,2,2,1,34,3,5,54,221,1,1,2,3,12];
        var arr2 = distinct(arr1);
        console.log(arr2);
    </script>
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用两个for循环和push方法
  • 利用两个for循环和splice方法
  • 利用sort和splice
  • 利用对象属性的不重复性
  • 利用indexOf和push
  • 利用set对象和拓展运算符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档