JavaScript去掉数组中的重复元素

Stella981
• 阅读 379

题目:去掉数组[4,3,"3",3,5,7,5]中的重复元素,返回[4,3,"3",5,7]

(function() {
    'use strict';
    function filter1(arr) {
        var b = [];
        arr.forEach(function(i) {
            if (b.indexOf(i) == -1) {
                b.push(i);
            }
        });
        return b;
    }

    function filter2(arr) {
        var b = {}, c = [];
        arr.forEach(function(i) {
            b[i] = b[i] ? b[i] : {};
            var type = typeof i;
            if (!b[i][type]) {
                b[i][type] = true;
                c.push(i);
            }
        });
        return c;
    }

    function filter3(arr) {
        var s = new Set();
        arr.map(x => s.add(x));
        return s;
    }

    function timer(fn, arr) {
        console.time('filter');
        fn.call(this, arr);
        console.timeEnd('filter');
    }

    function testArr(n) {
        // var arr = [4,3,"3",3,5,7,5];
        var arr = [];
        for (var i = 0; i < n; i++) {
            arr.push(i);
            arr.push(i + "");
        }
        return arr;
    }

    for (var i = 1; i <= 100; i++) {
        console.log(i * 10);
        var arr = testArr(i * 10);
        timer(filter1, arr);
        timer(filter2, arr);
        timer(filter3, arr);
    }
})();

当数组长度短的时候,经常filter1的速度快于filter2(例如题目中的数组,采用filter1相对比较快),当数组长度不断增长时,两种方式的差距就体现出来了。filter3速度最快,但是目前还不能广泛使用。

数组长度1000时:

  • filter1: 28.24ms
  • filter2: 1.81ms
  • filter3: 0.42ms

可以感受一下。

有其它方法否?


ES6新特性

var s = new Set();
[4, 3, "3", 3, 5, 7, 5].map(x => s.add(x));
console.log(s);

Set [ 4, 3, "3", 5, 7 ]

部分浏览器实现。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
达里尔 达里尔
4个月前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这