其實網上搜索這些方法一堆堆的,之所以還來寫一遍主要是因爲自己習慣一種之後就忘了其他方法怎麽實現,就寫一寫總結一下,順便做個測試看看哪個效率最高,爲了更好展示效果,我會先總結認爲比較好的方法,後面統一測試。(溫馨提示:下文衹是爲了簡便,一般情況下不建議寫在原型上,容易污染全局)
一,通過尋找對象屬性
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);
結果在我的谷歌瀏覽器發現
方法一:0毫秒
方法二:1毫秒
方法三:0毫秒
方法四:00毫秒
(嗯,果然現代瀏覽器强大無比,不吐槽舊瀏覽器了)
看看1000個數字
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(1000), fn1 = function(){ ary.unique1() }, fn2 = function(){ ary.unique2() }, fn3 = function(){ ary.unique3() }, fn4 = function(){ ary.unique4() }; useTime(fn1); useTime(fn2); useTime(fn3); useTime(fn4); 方法一:1-2毫秒 方法二:40-50毫秒 方法三:40-50毫秒 方法四:0-1毫秒 看看10000個數字(數據龐大,開始吃不消了,等個五六秒吧) 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(10000), fn1 = function(){ ary.unique1() }, fn2 = function(){ ary.unique2() }, fn3 = function(){ ary.unique3() }, fn4 = function(){ ary.unique4() }; useTime(fn1); useTime(fn2); useTime(fn3); useTime(fn4);
因爲數據龐大,我衹拿一次數據,你們喜歡就刷新幾次比較唄
方法一:10毫秒
方法二:1258毫秒
方法三:2972毫秒
方法四:5毫秒
原本還想給更大的數據看看,然後十萬個我的頁面就奔潰了。。。潰了。。。了
然後試試五萬個,也奔潰了。。。潰了。。。了
那就算吧,
反正在一萬個數據裏面對比,數據越大,方法一跟方法四按毫秒遞增,方法二跟方法三效率感人
效率計算:4>1>2>3
方法計算: 先排序,再比較前後兩個數字是不是相等 > 通過尋找對象屬性 > 通過尋找數組位置 > 搜索數字第一次出現的位置是不是跟當前位置一樣
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]