JavaScript去掉数组中的重复元素

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

1(function() { 2 'use strict'; 3 function filter1(arr) { 4 var b = []; 5 arr.forEach(function(i) { 6 if (b.indexOf(i) == -1) { 7 b.push(i); 8 } 9 }); 10 return b; 11 } 12 13 function filter2(arr) { 14 var b = {}, c = []; 15 arr.forEach(function(i) { 16 b[i] = b[i] ? b[i] : {}; 17 var type = typeof i; 18 if (!b[i][type]) { 19 b[i][type] = true; 20 c.push(i); 21 } 22 }); 23 return c; 24 } 25 26 function filter3(arr) { 27 var s = new Set(); 28 arr.map(x => s.add(x)); 29 return s; 30 } 31 32 function timer(fn, arr) { 33 console.time('filter'); 34 fn.call(this, arr); 35 console.timeEnd('filter'); 36 } 37 38 function testArr(n) { 39 // var arr = [4,3,"3",3,5,7,5]; 40 var arr = []; 41 for (var i = 0; i < n; i++) { 42 arr.push(i); 43 arr.push(i + ""); 44 } 45 return arr; 46 } 47 48 for (var i = 1; i <= 100; i++) { 49 console.log(i * 10); 50 var arr = testArr(i * 10); 51 timer(filter1, arr); 52 timer(filter2, arr); 53 timer(filter3, arr); 54 } 55})();

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

数组长度1000时:

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

可以感受一下。

有其它方法否?


ES6新特性

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

部分浏览器实现。

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

JavaScript去掉数组中的重复元素 - HelloWorld