摘要:你不知道的數(shù)組去重雙重循環(huán)時間復雜度空間復雜度優(yōu)點兼容性好,缺點代碼較多,時間復雜度也高。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復的值。
你不知道的數(shù)組去重
1. 雙重循環(huán)
var arr = [4, 4, 2, "2", 1] function unique1(array) { var res = [] for (let i = 0; i < arr.length; i++) { for (var j = 0; j < res.length; j++) { if (arr[i] === res[j]) { break; } } if (j === res.length) { res.push(arr[i]) } } return res } console.log("unique1", unique1(arr))
時間復雜度 o(n^2) 空間復雜度 o(n)
優(yōu)點: 兼容性好,
缺點: 代碼較多, 時間復雜度也高。
2. indexOf
返回 某個指定字符串在字符串中首次出現(xiàn)的位置, 如果沒有匹配到返回 -1
function unique2(array) { var res = [] for (let i = 0; i < arr.length; i++) { var current = arr[i] if (res.indexOf(current) === -1) { res.push(arr[i]); } } return res } console.log("indexOf: " + unique2(arr)) // 簡化代碼 function unique3(array) { var res = array.filter((item, index, array) => { return array.indexOf(item) === index }) return res } console.log("indexOf: " + unique2(arr)) }
時間復雜度 o(n)
排序去重 sort
sort(compareFunction) 排序原理
如果不寫compareFunction 的話會按照Unicode字符編碼去排序也就有時候我們會看到
800 會排在 9 前面function compareFunction(a, b) {
return a - b; }compareFunction(a, b) 返回結果 小于0則按照升序排列;
大于0按照降序排列
等于0保持原來順序
function unique3(array) { var res = [] var array = arr.sort() var current = array[0] for (let i=0; iES6 Set
ES6 提供了新的數(shù)據(jù)結構 Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復的值。// Array.from方法可以將 Set 結構轉為數(shù)組 function unique4(arr) { return Array.from(new Set(arr)) } let arr = ["1", 2, 1, "A", "A", "a", 1, 2]; console.log("Set", unique4(arr)) // or function unique4(arr) { return [...new Set(arr)] } let arr = ["1", 2, 1, "A", "A", "a", 1, 2]; console.log("Set", unique4(arr))Map ES6
? 一個Map對象在迭代時會根據(jù)對象中元素的插入順序來進行 — 一個 for...of 循環(huán)在每次迭代后會返回一個形式為[key,value]的數(shù)組。? 方法has() 返回一個bool值,用來表明map 中是否存在指定元素.
? set() 方法為 Map 對象添加或更新一個指定了鍵(key)和值(value)的(新)鍵值對
function unique6(arr) { const temp = new Map() return arr.filter((a) => !temp.has(a) && temp.set(a, 1)) } let arr = ["1", 2, 1, "A", "A", "a", 1, 2]; console.log("unique6 " + unique6(arr))閱讀原文了解更多
【作者簡介】 Mars 蘆葦科技web前端開發(fā)工程師 喜歡 看電影 ,擼鐵 還有學習。擅長 微信小程序開發(fā), 系統(tǒng)管理后臺。訪問 www.talkmnoney.cn了解更多。作者主頁:
github
segmentfault
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105612.html
摘要:排序,數(shù)組去重,打亂數(shù)組,統(tǒng)計數(shù)組各個元素出現(xiàn)的次數(shù),字符串各個字符的出現(xiàn)次數(shù),獲取地址鏈接的各個參數(shù)以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序,數(shù)組去重,打亂數(shù)組,統(tǒng)計數(shù)組各個元素出現(xiàn)的次數(shù), 字符串各個字符的出現(xiàn)次數(shù),獲取地址鏈接的各個參數(shù) 以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序 本來想多列幾個排序方法,但是其它都...
摘要:語法對數(shù)組進行排序,然后兩兩比較法對數(shù)組進行排序定義新數(shù)組遍歷數(shù)組將的最后一項與數(shù)組的單項進行對比,相等則添加到新數(shù)組利用對象屬性的唯一性判斷是否有的屬性方法可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置,沒有則返回 1.es6 語法 new Set() function unique(arr){ return new Set(arr) } 2.對數(shù)組進行排序,然后兩兩比較法 f...
摘要:數(shù)組去重看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。還有就是方法返回的數(shù)組也是排序后的數(shù)組,某些情況下可能不符合要求。 JS數(shù)組去重 看了網(wǎng)上很多數(shù)組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。部分內(nèi)容參考該博客 1 . 在原數(shù)組上操作(基本方法) 思路:利用循環(huán)嵌套,判斷數(shù)組中每個元素與其后面的元素是否相等,如果相等,就使用spli...
摘要:同行這么做使用實現(xiàn)圓形進度條前端掘金在開發(fā)微信小程序的時候,遇到圓形進度條的需求。實現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業(yè)加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
摘要:同行這么做使用實現(xiàn)圓形進度條前端掘金在開發(fā)微信小程序的時候,遇到圓形進度條的需求。實現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業(yè)加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
閱讀 2650·2021-11-25 09:43
閱讀 670·2021-11-12 10:36
閱讀 4615·2021-11-08 13:18
閱讀 2168·2021-09-06 15:00
閱讀 3106·2019-08-30 15:56
閱讀 924·2019-08-30 13:57
閱讀 1985·2019-08-30 13:48
閱讀 1413·2019-08-30 11:13