Войти Зарегистрироваться
Войти Зарегистрироваться
10.01.2018 в 16:53 Блог

Введение в наборы в JavaScript

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

Источник

Вот простой пример, демонстрирующий базовый набор и несколько доступных на нем методов, таких как add, size, has, forEach, delete и clear:

let animals = new Set();

animals.add('🐷');
animals.add('🐼');
animals.add('🐢');
animals.add('🐿');
console.log(animals.size); // 4
animals.add('🐼');
console.log(animals.size); // 4

console.log(animals.has('🐷')); // true
animals.delete('🐷');
console.log(animals.has('🐷')); // false

animals.forEach(animal => {
 console.log(`Hey ${animal}!`);
});

// Hey 🐼!
// Hey 🐢!
// Hey 🐿!

animals.clear();
console.log(animals.size); // 0

Вот еще один пример, когда мы передаем массив для инициализации набора. Обратите внимание, что инициализирующий массив деконструируется, но добавленный позже массив остается в виде массива:

let myAnimals = new Set(['🐷', '🐢', '🐷', '🐷']);

myAnimals.add(['🐨', '🐑']);
myAnimals.add({ name: 'Rud', type: '🐢' });
console.log(myAnimals.size); // 4

myAnimals.forEach(animal => {
 console.log(animal);
});


// 🐷
// 🐢
// ["🐨", "🐑"]
// Object { name: "Rud", type: "🐢" }

Строки являются итерабельными, поэтому они также могут быть переданы для инициализации набора:

console.log('Only unique characters will be in this set.'.length); // 43

let sentence = new Set('Only unique characters will be in this set.');
console.log(sentence.size); // 18

Помимо использования forEach в наборе, для ... циклов также можно использовать итерации над наборами:

let moreAnimals = new Set(['🐺', '🐴', '🐕', '🐇']);

for (let animal of moreAnimals) {
 console.log(`Howdy ${ animal }`);
}

// Howdy 🐺
// Howdy 🐴
// Howdy 🐕
// Howdy 🐇

Ключи и значения

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

let partyItems = new Set(['🍕', '🍾', '🎊']);
let items = partyItems.values();

console.log(items.next());
console.log(items.next());
console.log(items.next());
console.log(items.next().done);

// Object {
// done: false,
// value: "🍕"
// }

// Object {
// done: false,
// value: "🍾"
// }

// Object {
// done: false,
// value: "🎊"
// }

// true
Автор Дмитрий Цирульников
Коментарии (0)
Для того что-бы оставить комментарий, авторизуйтесь