zoukankan      html  css  js  c++  java
  • JS数组去重的三种方法

    在程序中,通常解决一个问题的方法有很多种。当然这些不同思路的解决方法,在性能和效率上也有很大差异。

    以下是数字去重的三种方法,

    一、循环遍历法(传统思路)

    最简单粗暴的算法,新建一个空数组,然后遍历原数组,将不在新数组中的项添加到新数组,最后返回新数组

    function compare(arr){
        var newarr=[];//新建空数组
        for(var i=0; i<arr.length;i++){//遍历原数组
            var isadd=true;//设置标记
            for(var j=0; j<newarr.length;j++){//遍历新数组
                if(arr[i]===newarr[j]){isadd=false;break;}//如果当前原数组中的项,在新数组中存在,则标记为‘不添加’,并跳出新数组遍历
            }
            if(isadd){newarr.push(arr[i]);}//若标记为‘添加’(即遍历新数组后,没有发现相同项),则添加进新数组
        }
        return newarr;//返回新数组
    }

    二、排序比较法(巧妙转换)

    相对第一种方法,需要每次遍历新旧两个数组,效率不高的情况。此方法先对原数组进行排序,这样每次只要与新数组的最后一项比较即可,大大提高效率

    function sortarr(arr){
        var arrsort=arr.sort();//对原数组进行排序
        var newarr=[];//新建空数组
        newarr.push(arrsort[0]);//将排序后数值的第一项给添加到新数组
        for(var i=1;i<arrsort.length;i++){//遍历排序后的数组
            if(arrsort[i]!==newarr[newarr.length-1]){newarr.push(arrsort[i])}//若当前项与新数组最后一项不同,这添加到新数组
        }
        return newarr;//返回新数组
    }

    三、对象属性法(另辟新径)

    相对前两种方法通过比较的方式,此方法主要利用了对象属性(key值)不可重复的特性,将数组中各项赋值给一个新对象,重复将自动覆盖。最后从对象上遍历出属性即可。

    function attribute(arr){
        var obj={};//新建空对象
        var newarr=[];//新建空数组
        for(var i=0; i<arr.length;i++){obj[arr[i]]=null;}//将原数组项作为对象的key进行赋值
        for( var attr in obj){newarr.push(Math.floor(attr));}//遍历对象,取出key值添加到新数组
        return newarr;//返回新数组
    }
  • 相关阅读:
    平方十位数
    随意组合
    显示二叉树
    四阶幻方
    方格填数
    数字排列
    青蛙跳N阶(变态跳)
    Mysql可重复读、避免幻读原理
    动态规划典型例题--连续子数组的最大和
    行列有序的二维数组查找
  • 原文地址:https://www.cnblogs.com/gulei/p/6856543.html
Copyright © 2011-2022 走看看