清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
题目:去掉数组[4,3,"3",3,5,7,5]中的重复元素,返回[4,3,"3",5,7]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | ( 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 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); } })(); |
当数组长度短的时候,经常filter1的速度快于filter2(例如题目中的数组,彩用filter1相对比较快),当数组长度不断增长时,两种方式的差距就体现出来了。
有其它方法否?