专栏首页小古哥的博客园JS数组去重的三种方法

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;//返回新数组
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 读书笔记《PHP与MySQL程序设计》一

    第1章 PHP概述 1.1  历史(PHP4、PHP5、PHP5.3、PHP6[未发布]) 1.2 一般语言特性(实用性、强大功能、可选择性、成本[开源]) 第...

    小古哥
  • 教程笔记《JavaScript深入浅出》

    一、数据类型 javascript是弱数据类型语言,不需要显式的定义类型,一共有如下六种数据类型 五种基本类型:number,string,boolean,nu...

    小古哥
  • WebStorm设置左侧菜单栏背景色和样式

    WebStrom一直以来都是默认的白色主题,今天想修改了下主题皮肤,结果导致左侧项目资源栏和顶部菜单栏也变成了黑色,结果无法改变回来,网上查了各种帖子,居然也没...

    小古哥
  • python由已知数组快速生成新数组的方法

    在利用numpy进行数据分析时,常有的一个需求是:根据已知的数组生成新数组。这个问题又可以分为两类:

    砸漏
  • javascript对数组的基本操作

    创建数组有两种方法,一个是通过new方法来创建,另一个就是直接通过字面量来创建,看网上有说通过new关键字来创建数组对象要比直接通过字面量来创建数组耗内存,这个...

    无邪Z
  • js数组常用操作

    剑行者
  • JavaScript数组

    数组可以通过索引来访问、设置、修改对应的数组元素,可以通过“数组名[索引]”的形式来获取数组中的元素。

    梨涡浅笑
  • 数组

    数组可以通过索引来访问、设置、修改对应的数组元素,可以通过“数组名[索引]”的形式来获取数组中的元素。

    星辰_大海
  • [Java 基础]数组

    数组初始化 定义数组语法格式 定义数组有两种方式,如下两种格式是等价的: int[] a1; int a1[];  注:在C/C++中,不支持第一种格式。但是...

    静默虚空
  • Javascript[0x01] -- 数组(一)

    具体的还是去看书本或者一些文档吧,这里就是简单地踩个点,那么我们直接进入到问题思考环节。

    丰臣正一

扫码关注云+社区

领取腾讯云代金券