摘要:時間為如果依賴排序在字符和數(shù)字組合中更是依賴大大增加的時間,并且影響了原有數(shù)組順序。時間為,同為循環(huán)對比,但是增加了內(nèi)層循環(huán)次數(shù)??傮w來說最佳選擇為但是推薦使用大道至簡
數(shù)組值只包含了字符和數(shù)字,更多類型增加不會影響以下method_*的排序(時間排序)
測試環(huán)境:版本 57.0.2987.133 (64-bit)
var arr1 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 1, 2, 3, 4, 5, 6, "1", "2", "1", "2"]; var arr2 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 1, 2, 3, 4, 5, 6]; while(arr1.length < 600000){ arr1 = arr1.concat(arr1); arr2 = arr2.concat(arr2); }
// // // // method_1:新建數(shù)組-雙循環(huán)-對比-push Array.prototype.unique = function(){ var res = [this[0]], len = this.length; for(var i = 1; i < len; i ++){ var repeat = false, rlen = res.length; for (var j = 0; j < rlen; j ++){ if(this[i] === res[j]){ repeat = true; break; } } !repeat && res.push(this[i]); } return res; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 18 var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 10
// // // // method_2:新建數(shù)組-排序-單循環(huán)-對比-push Array.prototype.unique = function () { this.sort(function (a, b) { if (typeof a != typeof b && a == b) { if (typeof a == "number") { return -1; } else { return 1 } } return parseInt(a) - parseInt(b); }) var res = [this[0]], len = this.length; for (var i = 1; i < len; i ++) { var slen = res.length; if (this[i] !== res[slen -1]) { res.push(this[i]); } } return res; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 121 var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 93
// // // // method_3:新建數(shù)組-新建對象-單循環(huán)-對象對比-數(shù)組push Array.prototype.unique = function () { var res = [], obj = {}, len = this.length; for (var i = 0; i < len; i++) { // 由于對象屬性為字符串 1 和 "1" 相同,因此做不到 === !obj[this[i]] && res.push(this[i]) && (obj[this[i]] = 1); } return res; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 8 var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 5
// // // method_4:新建數(shù)組-循環(huán)-向后查詢-數(shù)組push Array.prototype.unique = function () { var res = [], len = this.length, i, j; for (i = 0; i < len; i++) { for (j = i + 1; j < len; j++) { if (this[i] === this[j]) { j = false; break; } } j && res.push(this[i]); } return res; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 28 var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 17
// // // // method_4:使用Set Array.prototype.unique = function (){ var arr = new Set(this); return [...arr]; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 75 var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 60
// // // // method_5:使用find/findIndex/indexOf Array.prototype.unique = function(){ var res = [this[0]], len = this.length; for(var i = 1; i < len; i ++){ var repeat = false, rlen = res.length; if(!res.find((v,k)=>{return v === this[i]})){ res.push(this[i]); } // if(res.indexOf(this[i]) == -1){ // res.push(this[i]); // } // if(res.findIndex((v,k)=>{return v === this[i]}) == -1){ // res.push(this[i]); // } } return res; } var timestamp = new Date().getTime(); arr1 = arr1.unique(); console.log(new Date().getTime() - timestamp); // 平均 110+ var timestamp = new Date().getTime(); arr2 = arr2.unique(); console.log(new Date().getTime() - timestamp); // 平均 65+總結(jié)
method_1時間為 18 /10 ,循環(huán)對比。
method_2時間為 121/93 , 如果依賴sort排序(在字符和數(shù)字組合中更是依賴sort callback)大大增加的時間,并且影響了原有數(shù)組順序。
method_3時間為 8/5 , 無法區(qū)分字符和數(shù)字。
method_4時間為 28/7 ,同method_1為循環(huán)對比,但是增加了內(nèi)層循環(huán)次數(shù)。
method_5時間為 75/60 , 使用Set數(shù)據(jù)結(jié)構(gòu)特性。
method_5時間為 110+/65+ , 使用find/findIndex/indexOf判斷。
總體來說最佳選擇為 method_1
但是推薦使用method_5----大道至簡
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82709.html
摘要:當(dāng)我完成這個題目并且看到其他大神的答案時,我就覺得我真的很有必要記錄一下這道題,并且思考它在中的實現(xiàn)。表示被查找的值方法返回一個由替換值替換一些或所有匹配的模式后的新字符串。舉一反三,多多思考,多多實踐才是學(xué)習(xí)前端的最佳實踐。 之前,我在Codewars上看到一道名為Recover a secret string from random triplets的題,這道題使我沉思了很久,最終...
摘要:基本操作數(shù)組去重寫在前面數(shù)組去重經(jīng)常出現(xiàn)在前端招聘的筆試題里,比如有數(shù)組,請用實現(xiàn)去重函數(shù),使得返回作為筆試題,考點有二正確?;窘榻B文章主要是對數(shù)組去重的常用方法進行介紹。 js基本操作-數(shù)組去重 寫在前面 JavaScript 數(shù)組去重經(jīng)常出現(xiàn)在前端招聘的筆試題里,比如: 有數(shù)組 var arr = [a, b, c, 1, 0, c, 1, , 1, 0],請用 JavaScr...
摘要:專題系列第三篇,講解各種數(shù)組去重方法,并且跟著寫一個前言數(shù)組去重方法老生常談,既然是常談,我也來談?wù)劇K愃朴跀?shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。 JavaScript 專題系列第三篇,講解各種數(shù)組去重方法,并且跟著 underscore 寫一個 unique API 前言 數(shù)組去重方法老生常談,既然是常談,我也來談?wù)劇?雙層循環(huán) 也許我們首先想到的是使用 indexOf 來循...
摘要:前端學(xué)習(xí)教程開發(fā)模塊化規(guī)范化工程化優(yōu)化工具調(diào)試值得關(guān)注的博客面試前端資源匯總歡迎提斧正數(shù)組去重數(shù)組去重由慢到快由繁到簡演化去重寫法,箭頭函數(shù)為新寫法。在去重過程中,原數(shù)組都是不變的。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。 前端學(xué)習(xí):教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:數(shù)組去重 JavaSc...
摘要:盡量避免使用表達式又稱動態(tài)屬性。使用計算數(shù)組中的重復(fù)項如果你想計算數(shù)組中的每個值有多少重復(fù)值,也可以快速幫到你。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.簡述一下你對HTML語義化的理解?并寫出一段語義化的HTML? 語義化是指根據(jù)內(nèi)容的結(jié)...
閱讀 1747·2023-04-25 23:43
閱讀 926·2021-11-24 09:39
閱讀 725·2021-11-22 15:25
閱讀 1725·2021-11-22 12:08
閱讀 1092·2021-11-18 10:07
閱讀 2080·2021-09-23 11:22
閱讀 3350·2021-09-22 15:23
閱讀 2503·2021-09-13 10:32