Наборы в JavaScript

Опубликовано: 5 Января, 2022

В этой статье мы будем обсуждать объект Set, предоставляемый ES6. Набор - это набор элементов, которые уникальны, т.е. ни один элемент не может быть повторен. Наборы в ES6 упорядочены: элементы набора могут повторяться в порядке вставки. Set может хранить любые типы значений, будь то примитивы или объекты.

Синтаксис:

новый Set ([it]);

Параметр:
it - это итеративный объект, все элементы которого 
добавлен в новый созданный набор, 
Если параметр не указан или передан null 
тогда новый созданный набор пуст.

Возврат:
Новый объект набора

Теперь создадим несколько наборов:
Пример:

// it contains
// ["sumit","amit","anil","anish"]
var set1 = new Set([ "sumit" , "sumit" , "amit" , "anil" , "anish" ]);
// it contains 'f', 'o', 'd'
var set2 = new Set( "fooooooood" );
// it contains [10, 20, 30, 40]
var set3 = new Set([ 10 , 20 , 30 , 30 , 40 , 40 ]);
// it is an empty set
var set4 = new Set();

Характеристики:
Set.prototype.size
- возвращает количество элементов в наборе .

Методы:

  1. Set.prototype.add () - добавляет новый элемент с указанным значением в конец объекта Set.

    Синтаксис:

    set1.add (val);
    
    Параметр:
    val - это значение, добавляемое к набору.
    
    Возврат:
    Установленный объект
    

    Пример:

    // using Set.prototype.add(value)
    // creating an empty set
    var set1 = new Set();
    // set contains 10, 20
    set1.add( 10 );
    set1.add( 20 );
    // As this method returns
    // the set object hence chanining
    // of add method can be done.
    set1.add( 30 ).add( 40 ).add( 50 );
    // prints 10, 20, 30, 40, 50
    console.log(set1);
  2. Set.prototype.delete () - удаляет элемент с указанным значением из объекта Set.
    Синтаксис:
    set1.delete (val);
    
    Параметр:
    val - это значение, которое нужно удалить из набора.
    
    Возврат:
    true, если значение успешно удалено из набора, иначе возвращает false.
    

    Пример:

    // using Set.protoype.delete(value)
    // creating set it contains
    // f, o , d, i, e
    var set1 = new Set( "foooodiiiieee" );
    // deleting e from the set
    // it prints true
    console.log(set1.delete( 'e' ));
    // set contains f, o, d, i
    console.log(set1);
    // deleting an element which is
    // not in the set
    // prints false
    console.log(set1.delete( 'g' ));
  3. Set.prototype.clear () - удаляет весь элемент из набора.
    Синтаксис:
    set1.clear ();
    
    Параметр:
    Без параметров
    
    Возврат:
    неопределенный
    

    Пример:

    // Using Set.prototype.clear()
    // creating a set
    var set2 = new Set([ 10 , 20 , 30 , 40 , 50 ]);
    // prints {10, 20, 30, 40, 50}
    console.log(set2);
    // clearing set2
    set2.clear()
    // prints {}
    console.log(set2);
  4. Set.prototype.entries () - возвращает объект итератора, который содержит массив, содержащий записи набора, в порядке вставки.
    Синтаксис:
    set1.entries ();
    
    Параметр:
    Без параметров
    
    Возврат:
    Он возвращает объект-итератор, содержащий
    массив [значение, значение] для каждого 
    элемент набора в порядке вставки. 
    

    Пример



    // Using Set.prototype.entries()
    // creating set
    var set1 = new Set();
    // adding element to the set
    set1.add( 50 );
    set1.add( 30 );
    set1.add( 40 );
    set1.add( 20 );
    set1.add( 10 );
    // using entries to get iterator
    var getEntriesArry = set1.entries();
    // each iterator is array of [value, value]
    // prints [50, 50]
    console.log(getEntriesArry.next().value);
    // prints [30, 30]
    console.log(getEntriesArry.next().value);
    // prints [40, 40]
    console.log(getEntriesArry.next().value);
  5. Set.prototype.has () - возвращает истину, если указанное значение присутствует в объекте Set.
    Синтаксис:
    set1.has (val);
    
    Параметр:
    val - значение для поиска в наборе
    
    Возврат:
    Истина, если значение присутствует, иначе возвращается ложь.
    

    Пример:

    // Using Set.prototype.has()
    // creating set
    var set1 = new Set();
    // adding element to the set
    set1.add( 50 );
    set1.add( 30 );
    // prints true
    console.log(set1.has( 50 ));
    // prints false
    console.log(set1.has( 10 ));
  6. Set.prototype.values () - возвращает все значения из набора в том же порядке вставки.
    Синтаксис:
    set1.values ();
    
    Параметр:
    Без параметров
    
    Возврат:
    Объект-итератор, содержащий все значения набора в том же порядке. 
    как они вставлены. 
    
  7. Set.prototype.keys () - он также возвращает все значения из набора в порядке вставки.
    Примечание: - аналогично values () в случае Set
    Синтаксис:
    set1.keys ();
    
    Параметр:
    Без параметров
    
    Возврат:
    Объект итератора, содержащий все 
    значения набора в том же порядке
    как они вставлены. 
    

    Пример:

    // Using Set.prototype.values()
    // Using Set.prototype.keys()
    // creating set
    var set1 = new Set();
    // adding element to the set
    set1.add( 50 );
    set1.add( 30 );
    set1.add( 40 );
    set1.add( "Geeks" );
    set1.add( "GFG" );
    // getting all the values
    var getValues = set1.values();
    // prints a SetIterator
    // that contains {50, 30, 40, "Geeks", "GFG"}
    console.log(getValues);
    // getting all the values
    var getKeys = set1.keys();
    // prints a SetIterator
    // that contains {50, 30, 40, "Geeks", "GFG"}
    console.log(getKeys);
  8. Set.prototype.forEach () - он выполняет заданную функцию один раз для каждого элемента в наборе в порядке вставки.
    Синтаксис:
    set1.forEach (обратный вызов [, этот аргумент]);
    
    Параметр:
    обратный вызов - это функция, которая должна выполняться для каждого элемента набора.
    thisargument - Значение, которое будет использоваться как this при выполнении обратного вызова.
    
    Возврат:
    Неопределенный
    

    Функция обратного вызова имеет три следующих параметра:

    • ключ элемента
    • значение элемента
    • объект Set для прохождения

    Пример:

    // Using Set.prototype.forEach(callback[, thisarg])
    // creating set
    var set1 = new Set();
    // adding element to the set
    set1.add({Firstname: "Sumit" , Lastname: "Ghosh" });
    set1.add( 50 );
    set1.add( 30 );
    set1.add( 40 );
    set1.add( "Geeks" );
    set1.add( "GFG" );
    // Declaring a call back function
    // we are using only one parameter value
    // so it will ignore other two .
    function printOne(values)
    {
    console.log(values);
    }
    // It prints value of all the element
    // of the set
    set1.forEach(printOne);
    // Declaring a call back function
    // we are using two parameter value
    // so it will ignore last one
    function printTwo(key, values)
    {
    console.log(key+ " " +values);
    }
    // As key and values are same in set
    // so it will print values twice
    set1.forEach(printTwo);
    // Declaring a call back function
    // we are using all three parameter value
    function printThree(key, values, set)
    {
    // it will print key and value
    // and the set object
    console.log(key+ " " +values);
    console.log(set);
    }
    // It prints key and value of each
    // element and the entire set object
    set1.forEach(printThree);

    Примечание: - В приведенном выше примере мы используем простую функцию обратного вызова, которая просто печатает элемент в консоли, ее можно спроектировать для выполнения любой сложной операции в соответствии с требованиями.

  9. Set.protoype [@@ iterator] () - возвращает функцию Set итератора, которая по умолчанию является функцией values ().
    Синтаксис:
    set1 [Symbol.iterator] ();
    
    Параметр:
    Без параметров
    
    Возврат:
    Функция Set итератора, по умолчанию это values ().

    Пример:

    // using Set.protoype[@@Iterator]()
    var set1 = new Set([ "sumit" , "sumit" , "amit" , "anish" ]);
    var getit = set1[Symbol.iterator]();
    // Printing the values in the
    // iterator "getit"
    // prints {value: "sumit", done: false}
    console.log(getit.next());
    // prints {value: "amit", done: false}
    console.log(getit.next());
    // prints {value: "anish", done: false}
    console.log(getit.next());
    // prints {value: undefined, done: true}
    console.log(getit.next());

Установить операции:

  1. subSet () - возвращает истину, если набор A является подмножеством набора B.
    Набор A называется подмножеством набора B , если все элементы набора A также присутствуют в наборе B.
    Теперь давайте реализуем и используем функцию подмножества.
    Пример:
    // check whether the set on which the
    // method is invoked is the subset of
    // otherset or not
    Set.prototype.subSet = function(otherSet)
    {
    // if size of this set is greater
    // than otherSet then it can'nt be
    // a subset
    if ( this .size > otherSet.size)
    return false ;
    else
    {
    for (var elem of this )
    {
    // if any of the element of
    // this is not present in the
    // otherset then return false
    if (!otherSet.has(elem))
    return false ;
    }
    return true ;
    }
    }
    // using the subSet function
    // Declaring different sets
    var setA = new Set([ 10 , 20 , 30 ]);
    var setB = new Set([ 50 , 60 , 10 , 20 , 30 , 40 ]);
    var setC = new Set([ 10 , 30 , 40 , 50 ]);
    // prints true
    console.log(setA.subSet(setB));
    // prints false
    console.log(setA.subSet(setC));
    // prints true
    console.log(setC.subSet(setB));
  2. union () - возвращает Set, который состоит из объединения Set A и Set B
    Набор называется объединением двух наборов, если он содержит весь элемент набора A, а также все элементы набора B , но не содержит повторяющихся элементов.
    Например: если элемент присутствует как в наборе A, так и в наборе B, тогда объединение наборов A и B будет содержать единственную копию элемента.
    Разрешите реализовать и использовать функцию объединения
    Пример:
    // Perform union operation between
    // called set and otherSet
    Set.prototype.union = function(otherSet)
    {
    // creating new set to store union
    var unionSet = new Set();
    // iterate over the values and add
    // it to unionSet
    for (var elem of this )
    {
    unionSet.add(elem);
    }
    // iterate over the values and add it to
    // the unionSet
    for (var elem of otherSet)
    unionSet.add(elem);
    // return the values of unionSet
    return unionSet;
    }
    // using the union function
    // Declaring values for set1 and set2
    var set1 = new Set([ 10 , 20 , 30 , 40 , 50 ]);
    var set2 = new Set([ 40 , 50 , 60 , 70 , 80 ]);
    // performing union operation
    // and storing the resultant set in
    // unionSet
    var unionSet = set1.union(set2);
    // prints [10, 20, 30, 40, 50, 60, 70, 80]
    console.log(unionSet.values());
  3. Crossction () - возвращает пересечение Set A и Set B.
    Набор называется пересечением наборов A и B, если он содержит элемент, который присутствует как в наборе A, так и в наборе B.
    Разрешите реализовать и использовать функцию пересечения
    Пример:
    // Performs intersection operation between
    // called set and otherSet
    Set.prototype.intersection = function(otherSet)
    {
    // creating new set to store intersection
    var intersectionSet = new Set();
    // Iterate over the values
    for (var elem of otherSet)
    {
    // if the other set contains a
    // similar value as of value[i]
    // then add it to intersectionSet
    if ( this .has(elem))
    intersectionSet.add(elem);
    }
    // return values of intersectionSet
    return intersectionSet;
    }
    // using intersection function
    // Declaring values for set1 and set2
    var set1 = new Set([ 10 , 20 , 30 , 40 , 50 ]);
    var set2 = new Set([ 40 , 50 , 60 , 70 , 80 ]);
    // performing union operation
    // and storing the resultant set in
    // intersectionset
    var intersectionSet = set1.intersection(set2);
    // prints {40, 50}
    console.log(intersectionSet.values());
  4. разница () - возвращает набор, который содержит разницу между набором A и набором B.
    Набор называется разницей между наборами A и B, если он содержит набор элементов e, которые присутствуют в наборе A, но отсутствуют в наборе B.
    Давайте реализуем и воспользуемся функцией разницы
    Пример:
    // Performs difference operation between
    // called set and otherSet
    Set.prototype.difference = function(otherSet)
    {
    // creating new set to store difference
    var differenceSet = new Set();
    // iterate over the values
    for (var elem of this )
    {
    // if the value[i] is not present
    // in otherSet add to the differenceSet
    if (!otherSet.has(elem))
    differenceSet.add(elem);
    }
    // returns values of differenceSet
    return differenceSet;
    }
    // using difference function
    // Declaring values for set1 and set2
    var set1 = new Set([ 10 , 20 , 30 , 40 , 50 ]);
    var set2 = new Set([ 40 , 50 , 60 , 70 , 80 ]);
    // performing union operation
    // and storing the resultant set in
    // intersectionset
    var differenceSet = set1.difference(set2);
    // prints {10, 20, 30}
    console.log(differenceSet);

Ссылка:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set

Эта статья предоставлена Сумитом Гошем . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.