Наборы в JavaScript
В этой статье мы будем обсуждать объект 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 - возвращает количество элементов в наборе .
Методы:
- 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);
- 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'
));
- 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);
- 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);
- 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
));
- Set.prototype.values () - возвращает все значения из набора в том же порядке вставки.
Синтаксис:set1.values (); Параметр: Без параметров Возврат: Объект-итератор, содержащий все значения набора в том же порядке. как они вставлены.
- 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);
- 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);
Примечание: - В приведенном выше примере мы используем простую функцию обратного вызова, которая просто печатает элемент в консоли, ее можно спроектировать для выполнения любой сложной операции в соответствии с требованиями.
- 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());
Установить операции:
- 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));
- 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());
- 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());
- разница () - возвращает набор, который содержит разницу между набором 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, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.