Изучая структуры данных Javascript, я наткнулся на структуру данных, называемую Set. Я решил немного углубиться в то, что составляет набор, чем он отличается от массива и как он может быть полезен при решении проблем.

Что такое набор?

Набор - это объект, который представляет собой набор значений. Это итерация в зависимости от порядка вставки, и каждое значение может встречаться только один раз в наборе.

Как создать новый набор?

Вы можете создать новый набор, написав следующее:

let mySet = new Set()

Написав «new Set ()», вы создаете новый экземпляр объекта Set.

Какие методы вы можете использовать с набором?

Чтобы добавить элемент в набор, вы можете использовать метод «.add», который добавит элемент в конец набора и вернет объект Set. При использовании «.add» вы можете добавлять только один элемент за раз.

mySet.add(3)  //returns Set { 3 } 

Вы также можете добавить объект в набор:

mySet.add({'a': 1, 'b': 2}) // returns Set { 3, {a: 1, b: 2}}

Есть несколько способов добавить массив в набор. Вы можете добавить массив при создании нового экземпляра набора:

const s = new Set([1, 2, 3]) //s = Set { 1, 2, 3}

Если вы уже создали новый набор, вы можете выполнить итерацию по массиву и добавить каждый элемент массива в набор.

const t = new Set()
let a = [1, 2, 3]
for(let num of a){
   t.add(num)
}
console.log(t) // Set { 1, 2, 3 }

Чтобы проверить, существует ли элемент в наборе, вы можете использовать метод «.has», который возвращает логическое значение.

t.has(1) // true 
t.has('a') //false

Метод .delete удалит элемент из набора:

t.delete(1) 
console.log(t) // Set { 2 } 

Сбор уникальных значений

Поскольку набор будет хранить только уникальные значения, это может быть полезно при сокращении массива до его уникальных элементов. Если вы хотите удалить дубликаты в массиве, вы можете преобразовать его в набор, а затем обратно в массив.

const a = [1, 1, 2, 3, 3]
let newA = [...new Set(a)] 
console.log(newA) // [1, 2, 3]

Свойство размера

Свойство .size набора вернет количество значений, содержащихся в наборе. Это похоже на вызов .length для массива.

t.size // = 1

Важные различия между наборами и массивами

  1. В отличие от массива, набор неупорядочен, поэтому вы не можете получить доступ к элементу через его индекс. Вместо этого вам придется использовать метод .has, чтобы проверить, существует ли элемент в наборе.
  2. Время выполнения операций может варьироваться в зависимости от того, используете ли вы набор или массив. Вот интересная статья, в которой сравниваются и сравниваются разные среды выполнения: https://stackoverflow.com/questions/39007637/javascript-set-vs-array-performance.

Источники:





Https://stackoverflow.com/questions/8338133/set-vs-array-difference