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