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