๐Ÿ“• Language/JavaScript

[Javascript] Set

a n u e 2023. 3. 6. 11:23

 

Set

1. ์ค‘๋ณต ๊ฐ’์ด ์—†๋Š” ์œ ์ผํ•œ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ

2. ์ˆœ์„œ์— ์˜๋ฏธ๊ฐ€ ์—†์Œ

3. index๋กœ ์ ‘๊ทผ ๋ถˆ๊ฐ€


1. Set ๊ฐ์ฒด ์ƒ์„ฑ

const set = new Set();
console.log(set); //Set(0) {}

const set1 = new Set([1, 2]); //Set(2) {1,2}

const set2 = new Set('hello'); //Set(4) {"h", "e", "l", "o"}

 

 

โ€ป ๋ฐฐ์—ด์˜ ์ค‘๋ณต์ œ๊ฑฐ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉ

//๊ธฐ์กด
const uniq = array => array.filter((v, i, self) => self.indexOf(v) === i);
console.log(uniq([1, 1, 2, 2, 3])); // [1, 2, 3]

//Set์ด์šฉ
const uniq = array => [...new Set(array)];
console.log(uniq([1, 1, 2, 2, 3])) // [1, 2, 3]

 

2. ์š”์†Œ์˜ ๊ฐœ์ˆ˜

const set = new Set([1, 2, 3]);

set.size = 10; //๋ฌด์‹œ
console.log(set.size); //3

 

3. ์š”์†Œ์˜ ์ถ”๊ฐ€

const set = new Set();
set.add(1).add(2).add(2);

console.log(set) //Set(2) {1,2}

const set2 = new Set();
set2
  .add(1)
  .add('a')
  .add(true)
  .add(undefined)
  .add(null)
  .add({})
  .add([]);

console.log(set2); // Set(7) {1, "a", true, undefined, null, {}, []}

 

4. ์š”์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ

const set = new Set([1, 2, 3]);

console.log(set.has(4)); //false

 

5. ์š”์†Œ ์‚ญ์ œ

 - add์ฒ˜๋Ÿผ ์ด์–ด์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•จ

const set = new Set([1, 2, 3]);

set.delete(2);  //index๊ฐ€ ์•„๋‹Œ ์š”์†Œ ๊ฐ’์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ. set์€ index์˜ ๊ฐœ๋…์ด ์—†๋‹ค.

console.log(set) //Set(2) {1, 3}

 

6. ์š”์†Œ ์ผ๊ด„ ์‚ญ์ œ

const set = new Set([1, 2, 3]);

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

 

7. Set์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ - ๊ต์ง‘ํ•ฉ

 - Set.prototype.intersection (1)

Set.prototype.intersection = function (set) {
  const result = new Set();

  for (const value of set) {
    if (this.has(value)) result.add(value);
  }
  return result;
};

- Set.prototype.intersection (2)

Set.prototype.intersection = function (set) {
  return new Set([...this].filter(v => set.has(v)));
};

- ์˜ˆ์ œ

const setA = new Set([2, 4, 6, 8]);
const setB = new Set([2, 4]);

// setA์™€ setB์˜ ๊ต์ง‘ํ•ฉ
console.log(setA.intersection(setB)); // Set(2) {2, 4}
// setB์™€ setA์˜ ๊ต์ง‘ํ•ฉ
console.log(setB.intersection(setA)); // Set(2) {2, 4}

 

8. Set์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ - ํ•ฉ์ง‘ํ•ฉ

 - ํ•ฉ์ง‘ํ•ฉ ์—ญ์‹œ ์ค‘๋ณต๋œ ์š”์†Œ ํฌํ•จ๋˜์ง€ ์•Š์Œ

 - Set.prototype.union (1)

Set.prototype.union = function (set) {
  const result = new Set(this); //๊ฐ์ฒด ๋ณต์‚ฌ

  for (const value of set) {
    result.add(value);
  }
  return result;
};

- Set.prototype.union (2)

Set.prototype.union = function (set) {
  return new Set([...this, ...set]);
};

- ์˜ˆ์ œ

const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);

// setA์™€ setB์˜ ํ•ฉ์ง‘ํ•ฉ
console.log(setA.union(setB)); // Set(4) {1, 2, 3, 4}
// setB์™€ setA์˜ ํ•ฉ์ง‘ํ•ฉ
console.log(setB.union(setA)); // Set(4) {2, 4, 1, 3}

 

9. Set์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ - ์ฐจ์ง‘ํ•ฉ

 - Set.prototype.diffrence (1)

Set.prototype.difference = function (set) {
  const result = new Set(this);

  for (const value of set) {
    result.delete(value);
  }
  return result;
};

 - Set.prototype.diffrence (2)

Set.prototype.difference = function (set) {
  return new Set([...this].filter(v => !set.has(v)));
};

- ์˜ˆ์ œ

const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);

// setA์— ๋Œ€ํ•œ setB์˜ ์ฐจ์ง‘ํ•ฉ
console.log(setA.difference(setB)); // Set(2) {1, 3}

// setB์— ๋Œ€ํ•œ setA์˜ ์ฐจ์ง‘ํ•ฉ
// ์ง‘ํ•ฉ B์—๋Š” ์กด์žฌํ•˜์ง€๋งŒ, A์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ์ด๋ฏ€๋กœ ์—†์Œ
console.log(setB.difference(setA)); // Set(0) {}

 

10. Set์˜ ์ง‘ํ•ฉ ์—ฐ์‚ฐ - ๋ถ€๋ถ„์ง‘ํ•ฉ & ์ƒ์œ„์ง‘ํ•ฉ

 - ์ง‘ํ•ฉ A๊ฐ€ ์ง‘ํ•ฉ B์— ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ, ์ง‘ํ•ฉ A๋Š” B์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋‹ค. B๋Š” A์˜ ์ƒ์œ„์ง‘ํ•ฉ์ด๋‹ค.

 - Set.prototype.isSuperset (1)

Set.prototype.isSuperset = function (subset) {
  for (const value of subset) {
    // this๊ฐ€ subset(value)์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š”์ง€ ์ฒดํฌ
    if (!this.has(value)) return false;
  }
  return true;
};

 - Set.prototype.isSuperset (2)

Set.prototype.isSuperset = function (subset) {
  const supersetArr = [...this];
  return [...subset].every(v => supersetArr.includes(v));
};

- ์˜ˆ์ œ

const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 4]);

// setA๊ฐ€ setB์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ธ์ง€ ํ™•์ธ
console.log(setA.isSuperset(setB)); // true
// setB๊ฐ€ setA์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ธ์ง€ ํ™•์ธ
console.log(setB.isSuperset(setA)); // false