摘要:你不知道的數組去重雙重循環時間復雜度空間復雜度優點兼容性好,缺點代碼較多,時間復雜度也高。它類似于數組,但是成員的值都是唯一的,沒有重復的值。
你不知道的數組去重
1. 雙重循環
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)
優點: 兼容性好,
缺點: 代碼較多, 時間復雜度也高。
2. indexOf
返回 某個指定字符串在字符串中首次出現的位置, 如果沒有匹配到返回 -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 提供了新的數據結構 Set。它類似于數組,但是成員的值都是唯一的,沒有重復的值。// Array.from方法可以將 Set 結構轉為數組 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對象在迭代時會根據對象中元素的插入順序來進行 — 一個 for...of 循環在每次迭代后會返回一個形式為[key,value]的數組。? 方法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前端開發工程師 喜歡 看電影 ,擼鐵 還有學習。擅長 微信小程序開發, 系統管理后臺。訪問 www.talkmnoney.cn了解更多。作者主頁:
github
segmentfault
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/105612.html
摘要:排序,數組去重,打亂數組,統計數組各個元素出現的次數,字符串各個字符的出現次數,獲取地址鏈接的各個參數以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序,數組去重,打亂數組,統計數組各個元素出現的次數, 字符串各個字符的出現次數,獲取地址鏈接的各個參數 以后會記錄自己解決過和遇到過的算法相關的題,系列一就以常見的開篇吧。 排序 本來想多列幾個排序方法,但是其它都...
摘要:數組去重看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。還有就是方法返回的數組也是排序后的數組,某些情況下可能不符合要求。 JS數組去重 看了網上很多數組去重方法,用的比較常見的大概就幾種,今天想自己來做一個總結。部分內容參考該博客 1 . 在原數組上操作(基本方法) 思路:利用循環嵌套,判斷數組中每個元素與其后面的元素是否相等,如果相等,就使用spli...
摘要:同行這么做使用實現圓形進度條前端掘金在開發微信小程序的時候,遇到圓形進度條的需求。實現也談數組去重前端掘金的數組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
摘要:同行這么做使用實現圓形進度條前端掘金在開發微信小程序的時候,遇到圓形進度條的需求。實現也談數組去重前端掘金的數組去重是一個老生常談的話題了。百度前端技術學院自定義前端掘金一標簽概念元素表示用戶界面中項目的標題。 閑話圖片上傳 - 掘金作者:孫輝,美團金融前端團隊成員。15年畢業加入美團,相信技術,更相信技術只是大千世界里知識的一種,個人博客: https://sunyuhui.com ...
閱讀 2662·2021-11-25 09:43
閱讀 682·2021-11-12 10:36
閱讀 4649·2021-11-08 13:18
閱讀 2189·2021-09-06 15:00
閱讀 3125·2019-08-30 15:56
閱讀 942·2019-08-30 13:57
閱讀 1999·2019-08-30 13:48
閱讀 1423·2019-08-30 11:13