Set

// 배열 대신 Set을 추천드린다.
//  대신 Set은 배열을 완전히 대체하긴 힘들다. 속성이 다르기 때문다.
//  Set은 좀 특별한 배열이라고 보면된다.
//  Set은 중복을 허용하지 않는다.

// --------------------------------------------------------
// const arr = [1, 2, 2, 3, 2, 4, 5, 4, 7];
// const s = new Set(arr);
// console.log(s); // Set(6) {1, 2, 3, 4, 5, 7}

// const result = Array.from(s);
// console.log(result); // [1, 2, 3, 4, 5, 7]

// --------------------------------------------------------
const s = new Set();
s.add(1);
s.add(1);
s.add(1);
s.add(2);

console.log(s); // Set(2) {1, 2}
console.log(s.size); // 2
console.log(s.has(1)); // true
console.log(s.has(3)); // false

for (const a of s) {
    console.log(a);
    // 1
    // 2
}

s.forEach(a => {
    console.log(a);
    // 1
    // 2
})

s.delete(2);
console.log(s); // Set(1) {1}

s.clear();
console.log(s); // Set(0) {}

console.log(s.size); // 0

s.add(1);
s.add('1');
console.log(s); // Set(2) {1, '1'}

// --------------------------------------------------------------------
// 보통 배열에서 중복이 되어야하는 경우도 있기에, 배열을 완벽하게 대체할 수 없다.
//  그래서 Set은 보통 중복이 없어야되는 배열 또는 기존 배열이있고, 그 배열에서 중복을 제거하고 싶을 때 보통 사용한다.
const arr = [1, 2, 3, 2, 3, 5, 5, 4, 2];
const s2 = new Set(arr);
console.log(s2); // Set(5) {1, 2, 3, 5, 4}
const arr2 = Array.from(s2);
console.log(arr2); // [1, 2, 3, 5, 4]