Nai-publish noong

JavaScript Set, Kaalaman na Dapat Malaman ng Bawat Baguhan na Programmer

Mga May-akda

Bakit Set?

Ito ay isang data structure na nagpapahintulot sa iyo na mag-imbak ng mga natatanging halaga ng anumang uri. Katulad ito sa isang array, ngunit hindi nagpapahintulot ng mga duplicate na halaga. Ito ay isang magandang paraan upang mag-imbak ng mga natatanging halaga ng anumang uri. Minsan gusto mong mag-imbak ng mga natatanging halaga sa isang array, ngunit ayaw mong mag-loop sa buong Array para suriin kung ang halaga ay umiiral na. Dito pumapasok ang Set.

Sa isang nakaraang artikulo, tinalakay natin ang Javascript Map. Ang Set ay katulad ng Map, ngunit nag-iimbak lamang ito ng mga key, hindi ng mga halaga. Ito ay isang magandang paraan upang panatilihin ang mga natatanging halaga ng anumang uri. Napakabigat ng paggamit ng Map sa maraming kaso. Kaya't pag-usapan natin ang Set.

Ano ang JavaScript Set?

Ang mga Set object ay koleksyon ng mga halaga. Ang isang halaga sa Set ay maaaring mangyari nang isang beses lamang; ito ay natatangi sa koleksyon ng Set. Maaari kang mag-iterate sa pamamagitan ng mga elemento ng isang set sa pagkakasunod-sunod ng pagsingit. Ang pagkakasunod-sunod ng pagsingit ay tumutugma sa pagkakasunod-sunod kung saan naipasok ang bawat piraso sa Set ng add() na paraan nang matagumpay (iyon ay, walang magkaparehong elemento na nasa Set nang tumawag ang Set sa add()).

Ang pagtutukoy ay nangangailangan na ang mga set ay ipatupad "na, sa average, nagbibigay ng mga oras ng pag-access na sublinear sa bilang ng mga elemento sa koleksyon." Samakatuwid, maaari itong ipakita sa panloob bilang isang hash table (na may O(1) lookup), isang search tree (na may O(log(N)) lookup), o anumang iba pang data structure, hangga't ang kumplikado ay mas mahusay kaysa sa O(N).

Paano lumikha ng Set?

Mayroong dalawang paraan upang lumikha ng Set. Ang unang paraan ay ang paggamit ng Set constructor. Ang pangalawang paraan ay ang paggamit ng Set object literal.

Set constructor

Ang Set constructor ay lumilikha ng bagong Set object. Maaari kang magpasa ng isang iterable object bilang isang argumento sa constructor. Ang mga elemento ng iterable object ay idaragdag sa bagong Set.

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

Set object literal

Ang Set object literal ay lumilikha ng bagong Set object. Maaari kang magpasa ng isang iterable object bilang isang argumento sa object literal. Ang mga elemento ng iterable object ay idaragdag sa bagong Set.

const set = {1, 2, 3, 4, 5};

Mga Paraan & Katangian ng Set

ParaanPaglalarawan
add()Nagdaragdag ng bagong elemento na may tinukoy na halaga sa Set object.
clear()Tinatanggal ang lahat ng elemento mula sa Set object.
delete()Tinatanggal ang elemento na nauugnay sa halaga at ibinabalik ang halagang Set.prototype.has(value) ay ibabalik noon. Ang Set.prototype.has(value) ay magbabalik ng false pagkatapos.
entries()Ibinabalik ang bagong Iterator object na naglalaman ng isang array ng [value, value] para sa bawat elemento sa Set object, sa pagkakasunod-sunod ng pagsingit.
forEach()Nagpapatupad ng ibinigay na function isang beses para sa bawat halaga sa Set object, sa pagkakasunod-sunod ng pagsingit.
has()Ibinabalik ang boolean na nagsasabi kung ang isang elemento ay naroroon na may ibinigay na halaga sa Set object.
keys()Ibinabalik ang bagong Iterator object na naglalaman ng mga halaga para sa bawat elemento sa Set object sa pagkakasunod-sunod ng pagsingit.
values()Ibinabalik ang bagong Iterator object na naglalaman ng mga halaga para sa bawat elemento sa Set object sa pagkakasunod-sunod ng pagsingit.
KatangianPaglalarawan
sizeIbinabalik ang bilang ng mga halaga sa Set object.

Mga Halimbawa ng Set

Magdagdag ng halaga sa Set

const set = new Set([1, 2, 3, 4, 5])
set.add(6)
console.log(Set) // Set { 1, 2, 3, 4, 5, 6 }

Magtanggal ng halaga mula sa Set

const set = new Set([1, 2, 3, 4, 5])
set.delete(3)
console.log(set) // Set { 1, 2, 4, 5 }

Suriin kung ang isang halaga ay umiiral sa Set

const set = new Set([1, 2, 3, 4, 5])
console.log(set.has(3)) // true

Mag-iterate sa pamamagitan ng Set

const set = new Set([1, 2, 3, 4, 5])
for (const item of Set) {
  console.log(item)
}
// 1
// 2
// 3
// 4
// 5

I-convert ang Set sa Array

const set = new Set([1, 2, 3, 4, 5])
const array = Array.from(set)
console.log(array) // [1, 2, 3, 4, 5]

I-convert ang Array sa Set

const Array = [1, 2, 3, 4, 5]
const set = new Set(array)
console.log(Set) // Set { 1, 2, 3, 4, 5 }

Kunin ang laki ng Set

const set = new Set([1, 2, 3, 4, 5])
console.log(set.size) // 5

Linisin ang Set

const set = new Set([1, 2, 3, 4, 5])
set.clear()
console.log(set) // Set {}

Pagsamahin ang Set

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
const set3 = new Set([...set1, ...set2])
console.log(set3) // Set { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

Kunin ang intersection ng dalawang Sets

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => set2.has(x)))
console.log(set3) // Set { 4, 5 }

Kunin ang pagkakaiba ng dalawang Sets

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => !set2.has(x)))
console.log(set3) // Set { 1, 2, 3 }

Suriin kung ang Set ay isang subset ng isa pang Set

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set2].every((x) => set1.has(x))) // true

Suriin kung ang Set ay isang superset ng isa pang Set

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set1].every((x) => set2.has(x))) // false

Suriin kung ang dalawang Sets ay disjoint

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
console.log([...set1].every((x) => !set2.has(x))) // true

Suriin kung ang dalawang Sets ay pantay

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([1, 2, 3, 4, 5])
console.log(set1.size === set2.size && [...set1].every((x) => set2.has(x))) // true

Suporta sa Browser

ChromeChromeFirefoxFirefoxEdgeEdgeSafariSafariOperaOpera
49+44+12+10.1+36+

Set vs. Array

SetArray
Natatanging halaga, hindi pinapayagan ang duplicate na halagaPinapayagan ang duplicate na halaga
Ang Set ay isang koleksyon ng mga halaga na walang partikular na pagkakasunod-sunodAng Array ay isang koleksyon ng mga halaga na may partikular na pagkakasunod-sunod
Ang Set ay iterableAng Array ay iterable
Ang Set ay mas mabagal kaysa sa isang array sa pag-initialize dahil gumagamit ito ng proseso ng hash.Ang Array ay mas mabilis sa mga tuntunin ng pag-initialize
Ang Pagganap ay mas mahusay kapag sinusuri ang pag-iral ng isang elementoAng Pagganap ay mas mahusay kapag na-access ang isang elemento

Ang artikulong ito ay orihinal na nai-publish sa blog.imam.dev.

Mga Sanggunian

  1. Mozilla Developer Network - Set

  2. W3Schools - Set

  3. ECMAScript® 2015 Language Specification - Set