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 条评论
登录 后参与评论

相关文章

来自专栏web

js中push(),pop(),unshift(),shift()的用法小结

1162
来自专栏用户3030674的专栏

java映射(map用法)

主要分三类:集合(set)、列表(List)、映射(Map) 1.集合:没有重复对象,没有特定排序方式 2.列表:对象按索引位置排序,可以有重复对象 3.映射...

5622
来自专栏遊俠扎彪

C++中的字符数组、字符串、字符指针的一些笔记

1、sizeof会计算实际内存空间,strlen会计算C风格的字符串的实际字符数(不包括\0)。

19610
来自专栏用户画像

正则表达式匹配 整数和正整数

?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?

842
来自专栏小小挖掘机

哇,原来python字符串是这样的!

python中的字符串一直是困扰小编的一大难题,相信大家伙也曾体验过被各种编码支配的恐惧吧。不过没关系,相信你读了这篇文章,一定会对python字符串豁然开朗!...

3805
来自专栏老司机的技术博客

宝宝都能学会的python编程教程10:调用函数

python里的函数和数学意义上的函数并没有太大差别。 调用函数 python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数...

3344
来自专栏十月梦想

PHP输出语句

prinf_r()是PHP的内置函数可以输出任意的数据(变量,数组,字符串),也是只能输出一个数据

1066
来自专栏Android Note

Java 8之lambda表达式(三)

1103
来自专栏Vamei实验室

Python基础04 运算

Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们展开后面的内容,高级应用暂时不介绍) 数学运算 >>>print 1+9   ...

2138
来自专栏marsggbo

malloc函数及用法

动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。 例如: int n; scanf("%d",&...

2378

扫码关注云+社区

领取腾讯云代金券