β¨ Set
- set κ°μ²΄λ μ€λ³΅λμ§ μλ μ μΌν κ°λ€μ μ§ν©
- λ°°μ΄κ³Ό μ μ¬νμ§λ§
1) λμΌν κ° μ€λ³΅ X
2) μμ μμμ μλ―Έ μμ.
3) μΈλ±μ€ μ κ·Ό λΆκ°
- μνμ μ§ν©μ ꡬννκΈ° μν μλ£κ΅¬μ‘°
- κ΅μ§ν©, μ°¨μ§ν©, μ¬μ§ν©, λ±μ ꡬνν μ μλ€.
1. Set μμ±
- Set μμ±μ ν¨μλ‘ μμ±νλ€.
const set = new Set();
- Set μμ±μ ν¨μλ μ΄ν°λ¬λΈμ μΈμλ‘ μ λ¬λ°μ Set κ°μ²΄λ₯Ό μμ±νλ€.
- μ€λ³΅λ κ°μ μμλ‘ μ μ₯λμ§ μλλ€.
- λ°°μ΄μμ μ€λ³΅λ μμλ₯Ό μ κ±°ν μ μλ€.
const newArr = arr => [new Set(arr)];
console.log(newArr([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
2. μμ κ°μ νμΈ
- size νλ‘νΌν° μ¬μ©νλ€.
- size νλ‘νΌν°λ setter ν¨μ μμ΄ getterλ§ μ‘΄μ¬νλ μ κ·Όμ νλ‘νΌν° -> μ«μλ₯Ό ν λΉνμ¬ Set κ°μ²΄μ μμ κ°μλ₯Ό λ³κ²½ν μ μλ€.
const { a } = new Set([1, 3, 2, 3]);
console.log(a); // 3
const set = new Set([1, 2, 3]);
console.log(Object.getOwnPropertyDescriptor(Set.prototype, 'size'));
set.size = 10; // 무μλλ€.
console.log(set.size); // 3
3. μμ μΆκ°
- Set.prototype.add μ¬μ©νλ€.
const set = new Set();
console.log(set); // Set(0) {}
set.add(1);
console.log(set); // Set(1) {1}
- add λ©μλ νΈμΆν νμ add λ©μλλ₯Ό μ°μμ μΌλ‘ νΈμΆν μ μλ€.
const set = new Set();
set.add(1).add(2);
console.log(set); // Set(2) {1, 2}
- μ€λ³΅λ μμ μΆκ°λ νμ©λμ§ μλλ€.
const set = new Set();
set.add(1).add(2).add(2);
console.log(set); // Set(2) {1, 2}
- μΌμΉ λΉκ΅ μ°μ°μ === μ¬μ©νλ©΄ NaNκ³Ό NaNμ λ€λ₯΄λ€κ³ νκ°νμ§λ§, Set κ°μ²΄λ κ°λ€κ³ νκ°νμ¬ μ€λ³΅ μΆκ° νμ©νμ§ μλλ€.
- +0, -0λ λ§μ°¬κ°μ§.
- Set κ°μ²΄λ κ°μ²΄λ λ°°μ΄ κ°μ΄ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ μμλ‘ μ μ₯ν μ μλ€.
4. μμ μ‘΄μ¬ μ¬λΆ νμΈ
- Set.prototype.has λ©μλ μ¬μ©νλ€.
- νΉμ μμμ μ‘΄μ¬ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λ°ννλ€.
const set = new Set([1, 2, 3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false
5. μμ μμ
- Set.prototype.delete λ©μλ μ¬μ©νλ€.
- μμ μ±κ³΅ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λ°ννλ€.
- μΈλ±μ€κ° μλ μμ νλ €λ μμ κ°μ μΈμλ‘ μ λ¬ν΄μΌνλ€. -> λ°°μ΄κ³Ό κ°μ΄ μΈλ±μ€λ₯Ό κ°μ§ μλλ€.
- μ‘΄μ¬νμ§ μλ κ°μ²΄μ μμλ₯Ό μμ νλ € νλ©΄ μλ¬ μμ΄ λ¬΄μλλ€.
- Set.prototype.add λ©μλμ λ¬λ¦¬ μ°μμ μΌλ‘ νΈμΆν μ μλ€.
const set = new Set([1, 2, 3]);
set.delete(2);
console.log(set); // Set(2) {1, 3}
5-1. μμ μΌκ΄ μμ
- Set.prototype.clear λ©μλ μ¬μ©νλ€.
- μΈμ λ undefined λ°ννλ€.
const set = new Set([1, 2, 3]);
set.clear();
console.log(set); // Set(0) {}
6. μμ μν
- Set.prototype.forEach λ©μλ μ¬μ©νλ€.
- Array.prototype.forEach λ©μλμ μ μ¬νκ² μ½λ°± ν¨μμ forEach λ©μλμ μ½λ°± ν¨μ λ΄λΆμμ thisλ‘ μ¬μ©λ κ°μ²΄λ₯Ό μΈμλ‘ μ λ¬νλ€.
1) 첫λ²μ§Έ μΈμ: νμ¬ μν μ€μΈ μμ κ°
2) λλ²μ§Έ μΈμ: νμ¬ μν μ€μΈ μμ κ°
3) μΈλ²μ§Έ μΈμ: νμ¬ μνμ€μΈ Set κ°μ²΄ μ체
- λ°°μ΄κ³Ό λ¬λ¦¬ Set κ°μ²΄λ μμμ μλ―Έκ° μμ΄ μΈλ±μ€λ₯Ό κ°μ§ μλλ€.
const set = new Set([1, 2, 3]);
set.forEach((v, v2, set) => console.log(v, v2, set));
/*
1 1 Set(3) {1, 2, 3}
2 2 Set(3) {1, 2, 3}
3 3 Set(3) {1, 2, 3}
*/
λͺ¨λ μμ μ κ°λ λ€μ 'λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive - μ΄μ λͺ¨ μ ' μ± μμ μ°Έκ³ νμ΅λλ€.
μ°Έκ³ μλ£: λͺ¨λμλ°μ€ν¬λ¦½νΈ deep dive - μ΄μ λͺ¨ μ , pp. 643 ~ 659
β¨ Set
- set κ°μ²΄λ μ€λ³΅λμ§ μλ μ μΌν κ°λ€μ μ§ν©
- λ°°μ΄κ³Ό μ μ¬νμ§λ§
1) λμΌν κ° μ€λ³΅ X
2) μμ μμμ μλ―Έ μμ.
3) μΈλ±μ€ μ κ·Ό λΆκ°
- μνμ μ§ν©μ ꡬννκΈ° μν μλ£κ΅¬μ‘°
- κ΅μ§ν©, μ°¨μ§ν©, μ¬μ§ν©, λ±μ ꡬνν μ μλ€.
1. Set μμ±
- Set μμ±μ ν¨μλ‘ μμ±νλ€.
const set = new Set();
- Set μμ±μ ν¨μλ μ΄ν°λ¬λΈμ μΈμλ‘ μ λ¬λ°μ Set κ°μ²΄λ₯Ό μμ±νλ€.
- μ€λ³΅λ κ°μ μμλ‘ μ μ₯λμ§ μλλ€.
- λ°°μ΄μμ μ€λ³΅λ μμλ₯Ό μ κ±°ν μ μλ€.
const newArr = arr => [new Set(arr)];
console.log(newArr([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
2. μμ κ°μ νμΈ
- size νλ‘νΌν° μ¬μ©νλ€.
- size νλ‘νΌν°λ setter ν¨μ μμ΄ getterλ§ μ‘΄μ¬νλ μ κ·Όμ νλ‘νΌν° -> μ«μλ₯Ό ν λΉνμ¬ Set κ°μ²΄μ μμ κ°μλ₯Ό λ³κ²½ν μ μλ€.
const { a } = new Set([1, 3, 2, 3]);
console.log(a); // 3
const set = new Set([1, 2, 3]);
console.log(Object.getOwnPropertyDescriptor(Set.prototype, 'size'));
set.size = 10; // 무μλλ€.
console.log(set.size); // 3
3. μμ μΆκ°
- Set.prototype.add μ¬μ©νλ€.
const set = new Set();
console.log(set); // Set(0) {}
set.add(1);
console.log(set); // Set(1) {1}
- add λ©μλ νΈμΆν νμ add λ©μλλ₯Ό μ°μμ μΌλ‘ νΈμΆν μ μλ€.
const set = new Set();
set.add(1).add(2);
console.log(set); // Set(2) {1, 2}
- μ€λ³΅λ μμ μΆκ°λ νμ©λμ§ μλλ€.
const set = new Set();
set.add(1).add(2).add(2);
console.log(set); // Set(2) {1, 2}
- μΌμΉ λΉκ΅ μ°μ°μ === μ¬μ©νλ©΄ NaNκ³Ό NaNμ λ€λ₯΄λ€κ³ νκ°νμ§λ§, Set κ°μ²΄λ κ°λ€κ³ νκ°νμ¬ μ€λ³΅ μΆκ° νμ©νμ§ μλλ€.
- +0, -0λ λ§μ°¬κ°μ§.
- Set κ°μ²΄λ κ°μ²΄λ λ°°μ΄ κ°μ΄ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ μμλ‘ μ μ₯ν μ μλ€.
4. μμ μ‘΄μ¬ μ¬λΆ νμΈ
- Set.prototype.has λ©μλ μ¬μ©νλ€.
- νΉμ μμμ μ‘΄μ¬ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λ°ννλ€.
const set = new Set([1, 2, 3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false
5. μμ μμ
- Set.prototype.delete λ©μλ μ¬μ©νλ€.
- μμ μ±κ³΅ μ¬λΆλ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λ°ννλ€.
- μΈλ±μ€κ° μλ μμ νλ €λ μμ κ°μ μΈμλ‘ μ λ¬ν΄μΌνλ€. -> λ°°μ΄κ³Ό κ°μ΄ μΈλ±μ€λ₯Ό κ°μ§ μλλ€.
- μ‘΄μ¬νμ§ μλ κ°μ²΄μ μμλ₯Ό μμ νλ € νλ©΄ μλ¬ μμ΄ λ¬΄μλλ€.
- Set.prototype.add λ©μλμ λ¬λ¦¬ μ°μμ μΌλ‘ νΈμΆν μ μλ€.
const set = new Set([1, 2, 3]);
set.delete(2);
console.log(set); // Set(2) {1, 3}
5-1. μμ μΌκ΄ μμ
- Set.prototype.clear λ©μλ μ¬μ©νλ€.
- μΈμ λ undefined λ°ννλ€.
const set = new Set([1, 2, 3]);
set.clear();
console.log(set); // Set(0) {}
6. μμ μν
- Set.prototype.forEach λ©μλ μ¬μ©νλ€.
- Array.prototype.forEach λ©μλμ μ μ¬νκ² μ½λ°± ν¨μμ forEach λ©μλμ μ½λ°± ν¨μ λ΄λΆμμ thisλ‘ μ¬μ©λ κ°μ²΄λ₯Ό μΈμλ‘ μ λ¬νλ€.
1) 첫λ²μ§Έ μΈμ: νμ¬ μν μ€μΈ μμ κ°
2) λλ²μ§Έ μΈμ: νμ¬ μν μ€μΈ μμ κ°
3) μΈλ²μ§Έ μΈμ: νμ¬ μνμ€μΈ Set κ°μ²΄ μ체
- λ°°μ΄κ³Ό λ¬λ¦¬ Set κ°μ²΄λ μμμ μλ―Έκ° μμ΄ μΈλ±μ€λ₯Ό κ°μ§ μλλ€.
const set = new Set([1, 2, 3]);
set.forEach((v, v2, set) => console.log(v, v2, set));
/*
1 1 Set(3) {1, 2, 3}
2 2 Set(3) {1, 2, 3}
3 3 Set(3) {1, 2, 3}
*/
λͺ¨λ μμ μ κ°λ λ€μ 'λͺ¨λ μλ°μ€ν¬λ¦½νΈ deep dive - μ΄μ λͺ¨ μ ' μ± μμ μ°Έκ³ νμ΅λλ€.
μ°Έκ³ μλ£: λͺ¨λμλ°μ€ν¬λ¦½νΈ deep dive - μ΄μ λͺ¨ μ , pp. 643 ~ 659