這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識(shí),希望對(duì)大家有所幫助
Set是一種類似于數(shù)組的數(shù)據(jù)結(jié)構(gòu),但是它的值是唯一的,即Set中的每個(gè)值只會(huì)出現(xiàn)一次。Set對(duì)象的實(shí)例可以用于存儲(chǔ)任何類型的唯一值,從而使它們非常適用于去重。
Map是一種鍵值對(duì)集合,其中每個(gè)鍵都是唯一的,可以是任何類型,而值則可以是任何類型。Map對(duì)象的實(shí)例可以用于存儲(chǔ)復(fù)雜的對(duì)象,并且可以根據(jù)鍵進(jìn)行快速的查找和訪問。
以下是Set和Map的一些常用方法:
Set:
- new Set(): 創(chuàng)建一個(gè)新的Set對(duì)象
- add(value): 向Set對(duì)象中添加一個(gè)新的值
- delete(value): 從Set對(duì)象中刪除一個(gè)值
- has(value): 檢查Set對(duì)象中是否存在指定的值
- size: 獲取Set對(duì)象中的值的數(shù)量
- clear(): 從Set對(duì)象中刪除所有值
Map:
- new Map(): 創(chuàng)建一個(gè)新的Map對(duì)象
- set(key, value): 向Map對(duì)象中添加一個(gè)鍵值對(duì)
- get(key): 根據(jù)鍵獲取Map對(duì)象中的值
- delete(key): 從Map對(duì)象中刪除一個(gè)鍵值對(duì)
- has(key): 檢查Map對(duì)象中是否存在指定的鍵
- size: 獲取Map對(duì)象中的鍵值對(duì)數(shù)量
- clear(): 從Map對(duì)象中刪除所有鍵值對(duì)
Set和Map是非常有用的數(shù)據(jù)結(jié)構(gòu),它們可以提高程序的性能和可讀性,并且可以簡化代碼的編寫。
Set
去重
使用 Set 可以輕松地進(jìn)行數(shù)組去重操作,因?yàn)?Set 只能存儲(chǔ)唯一的值。
const arr = [1, 2, 3, 1, 2, 4, 5]; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // [1, 2, 3, 4, 5]
數(shù)組轉(zhuǎn)換
可以使用 Set 將數(shù)組轉(zhuǎn)換為不包含重復(fù)元素的 Set 對(duì)象,再使用 Array.from() 將其轉(zhuǎn)換回?cái)?shù)組。
const arr = [1, 2, 3, 1, 2, 4, 5]; const set = new Set(arr); const uniqueArr = Array.from(set); console.log(uniqueArr); // [1, 2, 3, 4, 5]
優(yōu)化數(shù)據(jù)查找
使用 Set 存儲(chǔ)數(shù)據(jù)時(shí),查找操作的時(shí)間復(fù)雜度為 O(1),比數(shù)組的 O(n) 要快得多,因此可以使用 Set 來優(yōu)化數(shù)據(jù)查找的效率。
const dataSet = new Set([1, 2, 3, 4, 5]); if (dataSet.has(3)) { console.log('數(shù)據(jù)已經(jīng)存在'); } else { console.log('數(shù)據(jù)不存在'); }
并集、交集、差集
Set數(shù)據(jù)結(jié)構(gòu)可以用于計(jì)算兩個(gè)集合的并集、交集和差集。以下是一些使用Set進(jìn)行集合運(yùn)算的示例代碼:
const setA = new Set([1, 2, 3]); const setB = new Set([2, 3, 4]); // 并集 const union = new Set([...setA, ...setB]); console.log(union); // Set {1, 2, 3, 4} // 交集 const intersection = new Set([...setA].filter(x => setB.has(x))); console.log(intersection); // Set {2, 3} // 差集 const difference = new Set([...setA].filter(x => !setB.has(x))); console.log(difference); // Set {1}
模糊搜索
Set 還可以通過正則表達(dá)式實(shí)現(xiàn)模糊搜索??梢詫⑵ヅ浣Y(jié)果保存到 Set 中,然后使用 Array.from() 方法將 Set 轉(zhuǎn)換成數(shù)組。
const data = ['apple', 'banana', 'pear', 'orange']; // 搜索以 "a" 開頭的水果 const result = Array.from(new Set(data.filter(item => /^a/i.test(item)))); console.log(result); // ["apple"]
使用 Set 替代數(shù)組實(shí)現(xiàn)隊(duì)列和棧
可以使用 Set 來模擬隊(duì)列和棧的數(shù)據(jù)結(jié)構(gòu)。
// 使用 Set 實(shí)現(xiàn)隊(duì)列 const queue = new Set(); queue.add(1); queue.add(2); queue.add(3); queue.delete(queue.values().next().value); // 刪除第一個(gè)元素 console.log(queue); // Set(2) { 2, 3 } // 使用 Set 實(shí)現(xiàn)棧 const stack = new Set(); stack.add(1); stack.add(2); stack.add(3); stack.delete([...stack][stack.size - 1]); // 刪除最后一個(gè)元素 console.log(stack); // Set(2) { 1, 2 }
Map
將 Map 轉(zhuǎn)換為對(duì)象
const map = new Map().set('key1', 'value1').set('key2', 'value2'); const obj = Object.fromEntries(map);
將 Map 轉(zhuǎn)換為數(shù)組
const map = new Map().set('key1', 'value1').set('key2', 'value2'); const array = Array.from(map);
記錄數(shù)據(jù)的順序
如果你需要記錄添加元素的順序,那么可以使用Map
來解決這個(gè)問題。當(dāng)你需要按照添加順序迭代元素時(shí),可以使用Map
來保持元素的順序。
const map = new Map(); map.set('a', 1); map.set('b', 2); map.set('c', 3); map.set('d', 4); for (const [key, value] of map) { console.log(key, value); } // Output: a 1, b 2, c 3, d 4
統(tǒng)計(jì)數(shù)組中元素出現(xiàn)次數(shù)
可以使用 Map 統(tǒng)計(jì)數(shù)組中每個(gè)元素出現(xiàn)的次數(shù)。
const arr = [1, 2, 3, 1, 2, 4, 5]; const countMap = new Map(); arr.forEach(item => { countMap.set(item, (countMap.get(item) || 0) + 1); }); console.log(countMap.get(1)); // 2 console.log(countMap.get(2)); // 2 console.log(countMap.get(3)); // 1
統(tǒng)計(jì)字符出現(xiàn)次數(shù)
使用Map數(shù)據(jù)結(jié)構(gòu)可以方便地統(tǒng)計(jì)字符串中每個(gè)字符出現(xiàn)的次數(shù)。
const str = 'hello world'; const charCountMap = new Map(); for (let char of str) { charCountMap.set(char, (charCountMap.get(char) || 0) + 1); } console.log(charCountMap); // Map { 'h' => 1, 'e' => 1, 'l' => 3, 'o' => 2, ' ' => 1, 'w' => 1, 'r' => 1, 'd' => 1 }
緩存計(jì)算結(jié)果
在處理復(fù)雜的計(jì)算時(shí),可能需要對(duì)中間結(jié)果進(jìn)行緩存以提高性能??梢允褂肕ap數(shù)據(jù)結(jié)構(gòu)緩存計(jì)算結(jié)果,以避免重復(fù)計(jì)算。
const cache = new Map(); function fibonacci(n) { if (n === 0 || n === 1) { return n; } if (cache.has(n)) { return cache.get(n); } const result = fibonacci(n - 1) + fibonacci(n - 2); cache.set(n, result); return result; } console.log(fibonacci(10)); // 55
使用 Map 進(jìn)行數(shù)據(jù)的分組
const students = [ { name: "Tom", grade: "A" }, { name: "Jerry", grade: "B" }, { name: "Kate", grade: "A" }, { name: "Mike", grade: "C" }, ]; const gradeMap = new Map(); students.forEach((student) => { const grade = student.grade; if (!gradeMap.has(grade)) { gradeMap.set(grade, [student]); } else { gradeMap.get(grade).push(student); } }); console.log(gradeMap.get("A")); // [{ name: "Tom", grade: "A" }, { name: "Kate", grade: "A" }]
使用 Map 過濾符合條件的對(duì)象
在實(shí)際開發(fā)中,我們常常需要在一個(gè)對(duì)象數(shù)組中查找符合某些條件的對(duì)象。此時(shí),我們可以結(jié)合使用 Map 和 filter 方法來實(shí)現(xiàn)。比如:
const users = [ { name: 'Alice', age: 22 }, { name: 'Bob', age: 18 }, { name: 'Charlie', age: 25 } ]; const userMap = new Map(users.map(user => [user.name, user])); const result = users.filter(user => userMap.has(user.name) && user.age > 20); console.log(result); // [{ name: 'Alice', age: 22 }, { name: 'Charlie', age: 25 }]
首先,我們將對(duì)象數(shù)組轉(zhuǎn)換為 Map,以便快速查找。然后,我們使用 filter 方法來過濾符合條件的對(duì)象。
這里我們列舉了一些使用Set
和Map
的實(shí)用技巧,它們可以大大簡化你的代碼,并使你更有效地處理數(shù)據(jù)。Set
和Map
是JavaScript中非常有用的數(shù)據(jù)結(jié)構(gòu),值得我們?cè)诰帉懘a時(shí)好好利用。文章來源:http://www.zghlxwxcb.cn/news/detail-445864.html
本文轉(zhuǎn)載于:
https://juejin.cn/post/7225425984312328252
如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-445864.html
到了這里,關(guān)于記錄--10個(gè)超級(jí)實(shí)用的Set、Map使用技巧的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!