Нашр шудааст дар

Маҷмӯи JavaScript: Дастури мукаммали барномасозон

Муаллифон

Чаро Set?

Ин як сохтори маълумот аст, ки ба шумо имкон медиҳад, ки арзишҳои беназири ҳар гуна навъро нигоҳ доред. Он ба массив монанд аст, аммо арзишҳои дубораро иҷозат намедиҳад. Ин як роҳи хубест барои нигоҳ доштани арзишҳои беназири ҳар гуна. Баъзан шумо мехоҳед арзишҳои беназирро дар як массив нигоҳ доред, аммо шумо намехоҳед, ки дар массив барои санҷидани он ки ин арзиш аллакай вуҷуд дорад ё не, давр занед. Ин ҷост, ки Set ба кор меояд.

Дар мақолаи пешина, мо дар бораи Javascript Map сӯҳбат кардем. Set ба Map монанд аст, аммо он танҳо калидҳоро нигоҳ медорад, на арзишҳо. Ин як роҳи хубест барои нигоҳ доштани арзишҳои беназири ҳар гуна навъ. Истифодаи Map дар бисёр ҳолатҳо душвор аст. Аз ин сабаб, биёед дар бораи Set сӯҳбат кунем.

JavaScript Set чист?

Объектҳои Set маҷмӯаҳои арзишҳо мебошанд. Арзиш дар Set танҳо як маротиба метавонад пайдо шавад; он дар маҷмӯаи Set беназир аст. Шумо метавонед барои элементҳои Set дар тартиби воридшавӣ давр занед. Тартиби воридшавӣ ба тартибе мувофиқат мекунад, ки ҳар як қисм бо муваффақият ба Set бо усули add() ворид шудааст (яъне, вақте ки Set add() -ро даъват кардааст, ягон элементи якхела аллакай дар Set вуҷуд надошт).

Таъйинот талаб мекунад, ки маҷмӯаҳо бо "таъминот, ба ҳисоби миёна, вақти дастрасӣ медиҳанд, ки аз рӯи шумораи элементҳо дар маҷмӯа зерихаттӣ аст" амалӣ карда шаванд. Бинобар ин, он метавонад ба таври дохилӣ ҳамчун як ҷадвали хеш (бо ҷустуҷӯи O(1)), як дарахти ҷустуҷӯ (бо ҷустуҷӯи O(log(N))), ё ҳар гуна сохтори маълумотии дигар, ҳангоме ки мураккабӣ аз O(N) беҳтар аст, намоиш дода шавад.

Чӣ тавр Set эҷод кардан мумкин аст?

Ду роҳи эҷод кардани Set вуҷуд дорад. Роҳи аввал истифодаи конструктори Set аст. Роҳи дуюм истифодаи ададҳои маҷмӯаи объекти Set аст.

Конструктори Set

Конструктори Set як объекти нави Set эҷод мекунад. Шумо метавонед як объекти такрорииро ҳамчун як аргумент ба конструктор гузаронед. Элементҳои объекти такрорӣ ба Set-и нав илова карда мешаванд.

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

Ададҳои объекти Set

Ададҳои объекти Set як объекти нави Set эҷод мекунанд. Шумо метавонед як объекти такрорииро ҳамчун як аргумент ба ададҳои объект гузаронед. Элементҳои объекти такрорӣ ба Set-и нав илова карда мешаванд.

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

Усулҳо ва хосиятҳои Set

УсулТавсиф
add()Ба объекти Set як элементи нави бо арзиши муайян илова мекунад.
clear()Ҳамаи элементҳоро аз объекти Set нест мекунад.
delete()Элементи марбут ба арзишро нест мекунад ва арзишеро бармегардонад, ки Set.prototype.has(value) пештар баргардонда буд. Баъд аз он Set.prototype.has(value) баргаштан ба false хоҳад дод.
entries()Як объекти навтарини Iteratorро бармегардонад, ки як массив аз [value, value] -ро барои ҳар як элемент дар объекти Set, дар тартиби воридшавӣ, дар бар мегирад.
forEach()Як функсияи додашударо як маротиба барои ҳар як арзиш дар объекти Set, дар тартиби воридшавӣ, иҷро мекунад.
has()Як булеании таъкид мекунад, ки оё як элемент бо арзиши додашуда дар объекти Set вуҷуд дорад ё не, бармегардонад.
keys()Як объекти навтарини Iteratorро бармегардонад, ки арзишҳоро барои ҳар як элемент дар объекти Set дар тартиби воридшавӣ дар бар мегирад.
values()Як объекти навтарини Iteratorро бармегардонад, ки арзишҳоро барои ҳар як элемент дар объекти Set дар тартиби воридшавӣ дар бар мегирад.
ХосиятТавсиф
sizeШумораи арзишҳо дар объекти Set -ро бармегардонад.

Мисолҳои Set

Илова кардани арзиш ба Set

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

Нест кардани арзиш аз Set

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

Санҷидани он, ки оё арзиш дар Set вуҷуд дорад ё не

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

Давр задан дар Set

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

Табдил додани Set ба массив

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

Табдил додани массив ба Set

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

Гирифтани андозаи Set

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

Тоза кардани Set

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

Муттаҳид кардани 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 }

Гирифтани тақовути ду Set

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 }

Гирифтани фарқи байни ду Set

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 }

Санҷидани он, ки оё Set як зеримаҷмӯаи 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

Санҷидани он, ки оё Set як боломаҷмӯаи 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

Санҷидани он, ки оё ду Set ҷудо ҳастанд ё не

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

Санҷидани он, ки оё ду Set баробар ҳастанд ё не

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

Дастгирии Браузер

ChromeChromeFirefoxFirefoxEdgeEdgeSafariSafariOperaOpera
49+44+12+10.1+36+

Set vs. массив

SetМассив
Арзиши беназир, арзиши дубораро иҷозат намедиҳадАрзиши дубораро иҷозат медиҳад
Set маҷмӯаи арзишҳо дар ҳеҷ тартибе махсус нестМассив маҷмӯаи арзишҳо дар як тартиби махсус аст
Set такроршаванда астМассив такроршаванда аст
Set аз массив дар ибтидоӣ сусттар аст, зеро он аз як раванди хеш истифода мекунад.Массив аз ҷиҳати ибтидоӣ зудтар аст
Иҷроиш беҳтар аст, вақте ки мавҷудияти як элементро санҷедИҷроиш беҳтар аст, вақте ки ба як элемент дастрасӣ пайдо кунед

Ин мақола дар аввал дар blog.imam.dev нашр шудааст.

Манобеъ

  1. Mozilla Developer Network - Set

  2. W3Schools - Set

  3. ECMAScript® 2015 Language Specification - Set