1. Знакомство с набором
Сам Set является конструктором, используемым для создания структуры данных Set.
Он похож на массив, но его элементы уникальны и не повторяются.
При добавлении значения в Set преобразования типов не происходит.Это похоже на оператор точного равенства (===).Основное отличие состоит в том, что при добавлении значения в Set NaN считается равным самому себе, а точное оператор равенства считает NaN не равным самому себе.
Set может получать массив в качестве параметра и используется для инициализации
методов:
size возвращает количество элементов в наборе
add добавляет элемент и возвращает текущий набор
delete удаляет элемент и возвращает логическое значение
определяет, содержит ли набор элемент и возвращает логическое значение
1.1. Использование
1.1.1 Дедупликация массива
function noRepeat(arr) {
return Array.from(new Set(arr))
// return [...new Set(arr)]
}
let s = new Set();
let arr = [1, 2, 1, 2, 3, 4, 2, 2, 34, 2, 4, 2, 4, 32, 2];
let s2 = new Set(arr);
console.log(noRepeat(arr))
console.log(s, typeof s);
console.log(s2);
1.1.2 Дедупликация строк
[...new Set('sssuuunnn')].join('') // join ['s', 'u', 'n'] => sun
1.1.3 Пересечение
let arr1 = [1, 1, 2, 1, 3, 4, 5, 6];
let arr2 = [4, 5, 6, 7, 8, 7, 1, 5, 7];
// let result = [...new Set(arr1)].filter(item => {
// let s2 = new Set(arr2);
// if (s2.has(item)) return true;
// else return false;
// });
let result = [...new Set(arr1)].filter(item => new Set(arr2).has(item));
console.log(result);
1.1.4 Союз
let arr1 = [1, 1, 2, 1, 3, 4, 5, 6];
let arr2 = [4, 5, 6, 7, 8, 7, 1, 5, 7];
let nuino = new Set([...arr1, ...arr2]);
console.log(nuino);
1.1.5 Набор различий
let arr1 = [1, 1, 2, 1, 3, 4, 5, 6];
let arr2 = [4, 5, 6, 7, 8, 7, 1, 5, 7];
// let result = [...new Set(arr1)].filter(item => {
// let s2 = new Set(arr2);
// if (s2.has(item)) return false;
// else return true;
// });
let result = [...new Set(arr1)].filter(item => !new Set(arr2).has(item));
console.log(result);
1.2. Установка атрибутов и методов экземпляров
1.2.1. Свойства
размер: атрибут размера указывает, сколько элементов содержится в коллекции set.
new Set([1, 2]).size // 2
1.2.2.Метод
add(value) : добавляет значение и возвращает саму структуру Set.
s2.add(100);
console.log(s2);
delete(value) : удалить значение и вернуть логическое значение, указывающее, было ли удаление успешным.
// 删除不存在的元素
s2.delete(99);
console.log(s2);
// 删除存在的元素
s2.delete(1);
console.log(s2);
has(value) : Возвращает логическое значение, указывающее, является ли параметр членом Set.
console.log(s2.has(99)); // false
console.log(s2.has(100)); // true
clear() : Очистить все члены, без возвращаемого значения
s2.clear();
console.log(s2);
1.3. Установка метода обхода
keys() : Возвращает средство обхода имен ключей.value
() : Возвращает средство обхода значений ключей.entries
() : Возвращает средство обхода пар ключ-значение
для…of…
let setArr = new Set([1, 6, 6, 'sun', {
name: 'sun'}])
for(let item of setArr.keys()) {
console.log(item);
// 1 6 sun {name: 'sun'}
}
for(let item of setArr.values()) {
console.log(item);
// 1 6 sun {name: 'sun'}
}
for(let item of setArr.entries()) {
console.log(item);
// [1, 1] [6, 6] [sun, sun] [{name: 'sun'}, {name: 'sun'}]
}
for(let item of setArr) {
console.log(item);
// 1 6 sun {name: 'sun'}
}
2. Знакомство с картой
ES6 предоставляет структуру данных Map, которая похожа на объект и также представляет собой набор пар ключ-значение.
Однако диапазон ключей не ограничивается строками.В качестве ключей могут использоваться различные типы значений (в том числе объекты).Карта
реализует интерфейс итератора, и по ней можно перемещаться с помощью оператора расширения и for of.
Атрибуты и методы карты:
size возвращает количество элементов в
наборе карты; добавляет элемент и возвращает текущую карту;
get возвращает ключевое значение ключевого объекта;
определяет, содержит ли карта элемент, и возвращает логическое значение.
Clear очищает карту и возвращает неопределенное значение
let m = new Map();
2.1. размер
console.log(m.size); // 0
2.2. набор
m.set('name', 'wf');
let key = {
world: 'a,b,c'
};
m.set(key, [1, 2, 3]);
console.log(m);
2.3. удалить
m.delete('name');
2.4. получать
m.get('name');
2.5. имеет
console.log(m.has('name')); // true
console.log(m.has('age')); // false
2.6. прозрачный
m.clear();
2.7.Обход
for (let v of m) {
console.log(v);
}