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

相关文章

来自专栏gaoqin31

c语言函数的隐式声明

编译器只有碰到函数原型的时候才知道这个函数的名字,参数类型个数返回值,到函数调用的时候才知道如何生成指令,所以函数原型必须出现在函数调用之前。

642
来自专栏老秦求学

快速排序

快速排序: 设要排序的数组是A[0]……A[N-1], 思想:分治法(递归实现)关键是求出基准记录所在的位置(由于两个数之间进行交换,导致原来基准的位置发生改变...

2696
来自专栏星回的实验室

js重修课[一]:数据类型

js的数据类型分为两类:原始类型(primitive)和对象类型(object type)。原始类型包括null、undefined、数字、字符串、布尔型。

832
来自专栏跟着阿笨一起玩NET

C#基础知识之方法重载总结

方法重载是指在同一个类中方法同名,参数不同,调用时根据实参的形式,选择与他匹配的方法执行操作的一种技术。

122
来自专栏idba

*args 和 **kwargs的用法

一 简介 *args 和 **kwargs 主要用于函数定义。 当我们需要定义的函数的传入参数个数不确定时,可以使用*args 和 **kwargs ...

623
来自专栏Golang语言社区

Golang语言社区--Go语言基础第七节函数调用等

大家好,我是Golang语言社区主编彬哥,本篇给大家带来的是关于Go语言中的函数调用相关。

45410
来自专栏coding for love

JS原生引用类型解析6-Boolean类型

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

631
来自专栏python读书笔记

python数据分析基础day4-字典字典的定义字典创建字典元素的获取字典的排序

今天说一下重要的数据类型,字典。 字典的定义 python中字典类型就是键值对的集合,其中键在一个字典中必须是唯一的,值没有这个要求。此外,值可以是数值,字符串...

2727
来自专栏nummy

JS遍历属性

对象属性可枚举,表示该属性的值不可修改,可认为该属性是常量。 如何定义不可枚举的属性?

822
来自专栏Python

python中星号的意义(**字典,*列表或元组)

传递实参和定义形参(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:*、** 。 调用函数时使用* ,**...

2056

扫描关注云+社区