其 上搜索 些方法一堆堆的,之所以 一遍主要是因 自己 一 之後就忘了其他方法怎麽 ,就 一 一下, 便做 看看哪 效率最高, 了更好展示效果,我 先 比 好的方法,後面 一 。( 馨提示:下文 是 了 便,一般情 下不建 在原型上,容易污染全局)
一,通 找 象 性
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique1 = function(){ var obj = {}, ary = [], i= 0, len = this.length; for(; i<len; i++){ if(!obj[this[i]]){ obj[this[i]] = 1; ary.push(this[i]); } } return ary.sort(function(a,b){return a - b});}console.log(n.unique1());
二,通 找 位置
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique2 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(ary.indexOf(this[i]) == -1) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}console.log(n.unique2());
三,跟 找 位置 似,搜索 字第一次出 的位置是不是跟 前位置一
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique3 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this.indexOf(this[i]) == i) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}console.log(n.unique3());
四,比 常 ,先排序,再比 前後 字是不是相等
var n = [14,12,2,2,2,5,32,2,59,5,6,33,12,32,6];Array.prototype.unique4 = function(){ this.sort(function(a,b){return a - b}); var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this[i] !== this[i-1]) ary.push(this[i]); } return ary;}console.log(n.unique4());
接下 是 上比 少的效率比 了,也是本文重 ,我 先生成一 函 一比
首先生成一 一百 字的
Array.prototype.unique1 = function(){ var obj = {}, ary = [], i= 0, len = this.length; for(; i<len; i++){ if(!obj[this[i]]){ obj[this[i]] = 1; ary.push(this[i]); } } return ary.sort(function(a,b){return a - b});}Array.prototype.unique2 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(ary.indexOf(this[i]) == -1) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}Array.prototype.unique3 = function(){ var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this.indexOf(this[i]) == i) ary.push(this[i]); } return ary.sort(function(a,b){return a - b});}Array.prototype.unique4 = function(){ this.sort(function(a,b){return a - b}); var ary = [], i= 0, len = this.length; for(; i<len; i++){ if(this[i] !== this[i-1]) ary.push(this[i]); } return ary;}function randomAry (n) { var ary = [],i=0; for(; i<n; i++){ ary.push(Math.ceil(Math.random()*10000)); } console.log(ary) return ary;}function useTime (fn) { var start = new Date(); fn(); var end = new Date(); console.log('本次函 行花了:' + (end - start) + '毫秒');}var ary = randomAry(100), fn1 = function(){ ary.unique1() }, fn2 = function(){ ary.unique2() }, fn3 = function(){ ary.unique3() }, fn4 = function(){ ary.unique4() };useTime(fn1);useTime(fn2);useTime(fn3);useTime(fn4);