ES6 - Карты и наборы
ES6 представляет две новые структуры данных - maps и sets. Давайте узнаем о них подробнее.
Карты
Карта - это упорядоченный набор key-value pairs. Карты похожи на объекты. Однако между картами и объектами есть некоторые различия. Они перечислены ниже -
Старший Нет | Объект | карта |
---|---|---|
1 | Ключи не могут быть объектами | Ключи могут быть любого типа |
2 | Ключи не заказываются | Ключи заказываются |
3 | не повторяется | повторяемый |
Синтаксис
Синтаксис для карты приведен ниже -
let map = new Map([iterable])
let map = new Map()
пример
В следующем примере создается карта с использованием итеративного конструктора -
<script>
let andy = {ename:"Andrel"},
varun = {ename:"Varun"},
prijin = {ename:"Prijin"}
let empJobs = new Map([
[andy,'Software Architect'],
[varun,'Developer']]
);
console.log(empJobs)
</script>
Вывод приведенного выше кода показан ниже -
{{…} => "Software Architect", {…} => "Developer"}
Проверка размера карты
Свойство size можно использовать для определения количества значений, хранящихся на карте.
Синтаксис
Синтаксис для проверки размера карты приведен ниже -
map_name.size
пример
<script>
let daysMap = new Map();
daysMap.set('1', 'Monday');
daysMap.set('2', 'Tuesday');
daysMap.set('3', 'Wednesday');
console.log(daysMap.size);
</script>
Вывод приведенного выше кода показан ниже -
3
Ниже приведены некоторые общие методы, которые можно использовать для управления картами.
Старший Нет | Объект и карта |
---|---|
1 | набор (ключ, значение) Добавляет ключ и значение на карту |
2 | получить (ключ) Возвращает значение, если ключ совпадает |
3 | имеет (ключ) Возвращает истину, если элемент с указанным ключом существует; иначе возвращает false |
4 | ключи () Возвращает итератор, содержащий ключи для каждого элемента в объекте карты. |
5 | значения() Возвращает итератор, содержащий значения для каждого элемента в объекте карты. |
6 | записи () Возвращает итератор, который содержит пары ключ-значение для каждого элемента на карте. |
7 | удалить (ключ) Удаляет указанный элемент из объекта Map |
WeakMap
WeakMap - это небольшой subset of map. Ключи имеют слабые ссылки, поэтому могут быть только непримитивными. Если нет ссылки на ключи объекта, он будет подлежать сборке мусора.
- не повторяется
- каждый ключ является типом объекта
WeakMap разрешит сборку мусора, если ключ не имеет ссылки.
Синтаксис
Синтаксис WeakMap указан ниже -
new WeakMap([iterable])
Пример 1
<script>
let emp = new WeakMap();
emp.set(10,'Sachin');// TypeError as keys should be object
</script>
Пример 2
<script>
let empMap = new WeakMap();
// emp.set(10,'Sachin');// Error as keys should be object
let e1= {ename:'Kiran'},
e2 = {ename:'Kannan'},
e3 = {ename:'Mohtashim'}
empMap.set(e1,1001);
empMap.set(e2,1002);
empMap.set(e3,1003);
console.log(empMap)
console.log(empMap.get(e2))
console.log(empMap.has(e2))
empMap.delete(e1)
console.log(empMap)
</script>
Вывод приведенного выше кода указан ниже -
{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}
Набор
Набор - это неупорядоченный набор уникальных значений. Эта структура данных может содержать значения примитивных и объектных типов.
Синтаксис
Синтаксис для Set приведен ниже -
new Set([iterable])
new Set()
пример
<script>
let names = new Set(['A','B','C','D']);
console.log(names)
</script>
Вывод приведенного выше кода приведен ниже -
{"A", "B", "C", "D"}
Проверка размера набора
Свойство size объекта Set можно использовать для запроса количества элементов в Set.
Синтаксис
Синтаксис для проверки размера набора упомянут ниже -
set.size
пример
<script>
let names = new Set(['A','B','C','D']);
console.log(names.size)
</script>
Вывод приведенного выше кода приведен ниже -
4
Итерация набора
Мы можем использовать forEach и for..ofциклы для перебора Set. Это показано в примере ниже -
пример
<script>
let names= new Set(['A','B','C','D']);
//iterate using forEach
console.log('forEach')
names.forEach(n=>console.log(n))
console.log('for of..')
//iterate using for..of
for(let n of names){
console.log(n)
}
</script>
Вывод приведенного выше кода указан ниже -
forEach
A
B
C
D
for of..
A
B
C
D
Следующие методы можно использовать для управления набором:
Старший Нет | Объект и карта |
---|---|
1 | добавить (элемент) Добавляет элемент в Набор |
2 | имеет (элемент) Возвращает истину, если элемент найден; иначе возвращает false |
3 | удалить (элемент) Удалить определенный элемент из набора |
4 | Чисто() Удаляет все элементы из набора |
WeakSet
Weakset слабо удерживает объекты, это означает, что объекты, хранящиеся в WeakSet, подлежат сборке мусора, если на них нет ссылок. WeakSets не повторяются и не имеютget метод.
<script>
let e1 = {ename:'A'}
let e2 ={ename:'B'}
let e3 ={ename:'C'}
let emps = new WeakSet();
emps.add(e1);
emps.add(e2)
.add(e3);
console.log(emps)
console.log(emps.has(e1))
emps.delete(e1);
console.log(emps)
</script>
Вывод приведенного выше кода будет таким, как указано ниже -
WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}