<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JS短文 | 3分鐘了解下 JS Sets 集合

          共 2631字,需瀏覽 6分鐘

           ·

          2021-02-21 08:54

          作者:Kyle Cook
          ?????? 網(wǎng)站:Web Dev Simplified Blog
          ?????? 字?jǐn)?shù):1583 字 (非直譯)
          ?????? 閱讀: 3 分鐘

          一、開篇語

          你也許看過或曾經(jīng)寫過類似的代碼:

          const?uniqueList?=?[1,?2,?3,?4,?5]
          const?newNumber?=?4

          if?(!uniqueList.include(newNumber))?{
          ??uniqueList.add(newNumber)
          }

          這段代碼本身沒啥問題,但是你要創(chuàng)建唯一項(xiàng)列表時(shí),數(shù)組通常不是最好的選擇,這時(shí)候 JS Set集合 則派上用場啦。

          Set集合 其實(shí)是 JS 的 Class類,該類你可以像常規(guī)數(shù)組一樣存儲內(nèi)容,但是其有一個(gè)重要的特性,強(qiáng)調(diào)內(nèi)容的唯一性。這意味著 Set集合 是一個(gè)唯一性的列表集合(uniqueList) ,如果我們試圖向其添加重復(fù)的內(nèi)容時(shí),集合則不會添加此內(nèi)容。這一特點(diǎn),對于確保列表的唯一性非常重要,關(guān)于其應(yīng)用場景,文末將會介紹到。

          JS Maps集合 與 Set集合 非常相似,只是其在鍵/值字典查找應(yīng)用場景替代Object對象十分常用,關(guān)于JS Maps集合 文章的介紹大家可以去看下這篇文章《JS短文 | 5分鐘了解 JS Maps 對象》

          二、如何使用Sets

          集合和數(shù)組非常相似,但兩者之間大部分的屬性和方法又有不同。

          1、創(chuàng)建Set(Creating A Set)

          前面說過 Set集合 是一個(gè) Class類,創(chuàng)建 Set集合時(shí),我們需要進(jìn)行實(shí)例化,剛實(shí)例化時(shí),則是一個(gè)空Set集合,如果向其填充值,我們可以傳遞可迭代的列表,例如數(shù)組,如下段代碼所示:

          const?emptySet?=?new?Set()
          const?itemSet?=?new?Set([1,?2,?3,?4])

          2、添加元素(Adding Items)

          實(shí)例化 Set集合 后,你很可能需要一個(gè)方法,往里填充內(nèi)容。這很簡單,我們使用 add 方法即可,由于add方法返回Set集合本身,我們可以使用鏈?zhǔn)秸Z法進(jìn)行添加內(nèi)容,示例代碼如下:

          const?itemSet?=?new?Set()

          itemSet.add(1)
          itemSet.add(2)
          itemSet.add(3).add(4)?//?Chaining
          //?[1,?2,?3,?4]

          3、獲取值(Getting Values)

          到目前為止,獲取元素的值是數(shù)組和Set集合最大的區(qū)別,在數(shù)組中,我們可以通過索引的方式獲取對應(yīng)的值,但是在 Set集合時(shí),不能按索引的方式獲取具體的值,如果你這么做了,則始終會返回undefined,如下段代碼所示:

          const?array?=?[1,?2]
          const?itemSet?=?new?Set(array)

          console.log(array[0])
          //?1

          console.log(itemSet[0])
          //?undefined

          雖然你不能像數(shù)組那樣通過索引方式訪問具體的值,但是你可能需要檢查某個(gè)值是否存在或者遍歷集合元素,這是Set集合中最常見的應(yīng)用場景。

          4、檢查值是否存在(Checking For Values)

          有時(shí)候,你需要檢查集合中是否存在你想找的值,你可以使用 has方法,傳遞你想查找的值,其返回布爾值。

          const?itemSet?=?new?Set([1,?2,?3,?4])

          itemSet.has(1)
          //?true
          itemSet.has(5)
          //?false

          5、移除值(Removing Values)

          你可能要刪除具體的值,這對于Set集合也十分容易,你可以使用 delete 方法。

          const?itemSet?=?new?Set([1,?2,?3,?4])

          itemSet.delete(1)
          itemSet.has(1)
          //?false

          6、迭代集合(Iterating Over A Set)

          迭代集合方法比較多,但是最常見的就是使用 forEach方法,其使用方法和數(shù)組的 forEach方法類似。

          const?itemSet?=?new?Set([1,?2,?3,?4])

          itemSet.forEach(item?=>?{
          ??console.log(item)
          })
          //?1
          //?2
          //?3
          //?4

          三、其它有用的方法和屬性

          • 你可以使用 size屬性 獲取 Set集合 的長度。
          • 你可以使用 clear()方法 清空 Set集合。

          四、Set應(yīng)用場景

          很明顯,Set集合的唯一性,對于一些業(yè)務(wù)場景的應(yīng)用十分有用。

          1、刪除重復(fù)的內(nèi)容

          如果你的數(shù)組內(nèi)容中包含重復(fù)的內(nèi)容,你想進(jìn)行去重,你該怎么做呢?首先將數(shù)組轉(zhuǎn)換成集合,利用唯一性將重復(fù)的內(nèi)容刪掉,然后將處理過的集合對象在轉(zhuǎn)換成數(shù)組,示例代碼如下。

          const?arrayWithDups?=?[1,?1,?2,?3,?3]
          const?itemSet?=?new?Set(arrayWithDups)
          const?array?=?[...itemSet]?//?Convert?Set?to?array
          console.log(array)
          //?[1,?2,?3]

          2、判斷列表的內(nèi)容是否唯一性

          基于上面的例子,我們可以更進(jìn)一步,通過集合的長度是否相等,來判斷一個(gè)數(shù)組列表是否具有唯一性,示例代碼如下:

          const?arrayWithDups?=?[1,?1,?2,?3,?3]
          const?itemSet?=?new?Set(arrayWithDups)
          const?isUnique?=?itemSet.size?===?arrayWithDups.length
          console.log(isUnique)
          //?false

          五、刪除列表的元素很容易

          刪除數(shù)組中的元素并不是特別輕松,到目前為止也沒有比較好的方法(雖然有方法,但是理解起來有些繞)。但是 Set 則不一樣,它提供最接近人類刪除的思維方式 delete() 方法進(jìn)行刪除,上面已介紹過。

          六、結(jié)束語

          Sets 集合是一個(gè)很好數(shù)據(jù)類型,當(dāng)我們需要執(zhí)行確保列表唯一性業(yè)務(wù)場景時(shí),可以使用它代替數(shù)組。今天的內(nèi)容就到這里,感謝你的閱讀。

          瀏覽 56
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆传媒无码 | 男女激情操逼一区福利网站 | 三级中文字幕 | 97一区二区三区 | 五月天亚洲综合小说网 |