前端之數據結構(三)

這是我參與8月更文挑戰的第四天,活動詳情查看:8月更文挑戰markdown

承接上文,繼續,今天的集合和字典介紹。數據結構

集合

  • 一種無序且惟一的數據結構。app

  • 在ES6中就有集合,名Set。post

  • 集合的經常使用操做:去重、判斷某元素是否在集合中、求交集等等...ui

去重

const arr = [1,1,2,2,3,3]
const arr2 = [...new Set(arr)]

console.log(arr2)
// [1, 2, 3]
複製代碼

判斷元素是否在集合中

const set = new Set(arr)
const has = set.has(2)

console.log(has)
// true
複製代碼

求交集

const set = new Set([1, 2])
const set2 = new Set([2, 3])

const set3 = [...set].filter(item => set2.has(item))

console.log(set3)
// [2]

複製代碼

求差集

const set = new Set([1, 2])
const set2 = new Set([2, 3])

const set3 = [...set].filter(item => !set2.has(item))

console.log(set3)
// [1]

複製代碼

Set基本操做

  • 使用 Set 對象:new、add、delete、has、sizeurl

  • 迭代 Set:多種迭代方法、SetArray 互轉、求交集/差集spa

  • 迭代 Setkey3d

const mySet = new Set([1,2,3,4,5])

for (let key of mySet) console.log(key);

// 1 2 3 4 5
複製代碼
  • 迭代 Setvalue
const mySet = new Set([1,2,3,4,5])

for (let key of mySet.values) console.log(key);

// 1 2 3 4 5
複製代碼
  • 迭代 Setkey 和 value
const mySet = new Set([1,2,3,4,5])

for (let [key, value] of mySet.entries()) 

console.log(key, value);

// 1 1 2 2 3 3 4 4 5 5
複製代碼

咱們能夠發現 Setkey 和 value是同樣的。code

  • Set 轉 Array
const mySet = new Set([1,2,3,4,5])

const myArr = [...mySet]

const myArr2 = Array.from(mySet)

複製代碼

字典

  • 與集合相似,字典也是一種存儲惟一值的數據結構,但它是以 鍵值對 的形式來存儲。orm

  • 在ES6中就有集合,名Map。

  • 字典的經常使用操做:鍵值對的增刪改查。

Set的基本操做

const map = new Map()
// 增
map.set('你', '好')
// 刪
map.delete('你')
map.clear() // 清空
// 改
map.set('你', '很差')
// 查
map.get('你')
複製代碼

時間複雜度都是 O(1)。

求交集

function intersection(nums1: number[], nums2: number[]): number[] {
    const map = new Map()
    nums1.forEach(e => {
        map.set(e, true)
    })
    const res = []
    nums2.forEach(e => {
        if(map.get(e)) {
            res.push(e)
            map.delete(e)
        }
    })
    return res
};
複製代碼

今天就到這裏,明天見!

相關文章
相關標籤/搜索