摘要:原文地址方法一普通方法方法二實質上是方法一的變通版本創建一個目的數組,并把源數組的第一項添加到目的數組的第一項上面的方法可以簡單處理或者或者方法三方法以空間換時間速度最快或者可以這樣說明對象中已經存在這一項了,也就是說在數組中重復了
原文地址
方法一 普通方法function unique1(srcArr) { let dstArr = [] for (let i = 0; i < srcArr.length - 1; i++) { if (dstArr.indexOf(srcArr[i]) == -1) dstArr.push(srcArr[i]) } return dstArr; }方法二 實質上是方法一的變通版本
function unique2(srcArr) { // 創建一個目的數組,并把源數組的第一項添加到目的數組的第一項 let destArr = [srcArr[0]] for(let i = 1; i < srcArr.length - 1; i++) { if(srcArr.indexOf(srcArr[i]) == i) destArr.push(srcArr[i]); } return destArr; }
// 上面的方法可以簡單處理
function unique3(srcArr) { return srcArr.filter((v, i) => srcArr.indexOf(v) === i) } // 或者 function unique4(srcArr) { return srcArr.form(new Set(srcArr)) } // 或者 function unique5(srcArr) { return [...new Set(this)]; }方法三 hash方法 以空間換時間, 速度最快
function unique6(srcArr) { let tempMap = {}, dstArr = []; for(let i = 0; i < srcArr.length - 1; i++) { if(!tempMap[srcArr[i]]) { destArr.push(srcArr[i]); tempMap[srcArr] = true; } } return destArr }
// 或者 可以這樣
function unique7(srcArr) { var obj = {}; for(var i = 0 ; i < srcArr.length; i++){ var cur = srcArr[i]; if(obj[cur] == cur){//說明對象中已經存在cur這一項了,也就是說在數組中重復了,刪除就可以了 // arr.splice(i,1); //用這個存在問題:后面每一項索引都改變,如果有1千萬項,非常耗性能 // 解決思路,我把數組末尾那一項的值拿過來,替換當前項,再把數組末尾那一項的值刪除掉就行 srcArr[i] = srcArr[srcArr.length-1]; srcArr.length -- ; i --;//解決了數組塌陷問題 continue; } obj[cur] = cur; } }方法四 排序后相鄰去重
這個方法也能想到,當初面試的時候想到的就是這個方法
function unique8(srcArr) { srcArr.sort() let dstArr = [srcArr[0]]; if(srcArr[i] !== destArr[destArr.length - 1]) destArr.push(srcArr[i]); return destArr; }方法五 優化遍歷數組 其實這個方法跟第一個方法沒什么區別
function unique9(srcArr) { let dstArr = [] for(let i = 0; i < srcArr.length; i++) { for(let j = i + 1; j < srcArr.length; j++) if (srcArr[i] === srcArr[j]) j = ++i; destArr.push(srcArr[i]); } return destArr; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100320.html
摘要:設計模式是以面向對象編程為基礎的,的面向對象編程和傳統的的面向對象編程有些差別,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續了解設計模式必須要先搞懂面向對象編程,否則只會讓你自己更痛苦。 JavaScript 中的構造函數 學習總結。知識只有分享才有存在的意義。 是時候替換你的 for 循環大法了~ 《小分享》JavaScript中數組的那些迭代方法~ ...
摘要:排序,數組去重,打亂數組,統計數組各個元素出現的次數,字符串各個字符的出現次數,獲取地址鏈接的各個參數以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序,數組去重,打亂數組,統計數組各個元素出現的次數, 字符串各個字符的出現次數,獲取地址鏈接的各個參數 以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序 本來想多列幾個排序方法,但是其它都...
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
摘要:參數用來測試數組的每個元素的函數。調用時使用參數。返回表示保留該元素通過測試,則不保留。執行時的用于的值。那些沒有通過測試的元素會被跳過,不會被包含在新數組中。有其他好的方法或思路的道友,不妨在沙發區神交一番。 需求 給出一個類數組,刪除要求的重復數據,返回新數組 destroyer([1, 2, 3, 1, 2, 3], 2, 3) should return [1, 1] dest...
距離上次發文,已經有一段時間了,最近工作比較忙,這不眼看快雙十一了,就相當于給大家一些福利吧! showImg(https://segmentfault.com/img/remote/1460000016538082?w=250&h=250); 一、什么是數組去重 簡單說就是把數組中重復的項刪除掉,你 GET 到了嗎 ?下面我將簡單介紹下幾種基本的方法及其優缺點。 二、方法匯總 兩層循環 無相同...
閱讀 2771·2021-10-11 11:08
閱讀 1489·2021-09-30 09:48
閱讀 1049·2021-09-22 15:29
閱讀 1037·2019-08-30 15:54
閱讀 976·2019-08-29 15:19
閱讀 527·2019-08-29 13:12
閱讀 3161·2019-08-26 13:53
閱讀 958·2019-08-26 13:28