Set
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015ë 7ì.
* Some parts of this feature may have varying levels of support.
Set ê°ì²´ë ììê°ì´ë ê°ì²´ 참조 ê° ë± ëª¨ë ì íì ê³ ì ê°ì ì ì¥í ë ì¬ì©í ì ììµëë¤.
ì¤ëª
Set ê°ì²´ë ê°ì 컬ë ì
ì
ëë¤. Setì ê°ì í ë²ë§ ëíë ì ìì¼ë©°, Setì 컬ë ì
ììë ê³ ì í ê°ì
ëë¤. Setì ìì를 ì½ì
ììëë¡ ìíí ì ììµëë¤. ì½ì
ììë ê° ììê° add() ë©ìëì ìí´ Setì ì±ê³µì ì¼ë¡ ì½ì
ë ìì(ì¦, add()ê° í¸ì¶ë ë ì´ë¯¸ Setì ëì¼í ììê° ìë ê²½ì°)ì í´ë¹í©ëë¤.
ëª ì¸ìììë Setì´ "íê· ì ì¼ë¡ 컬ë ì ì ìì ìì ë°ë¼ ì í ì´íì ì¡ì¸ì¤ ìê°ì ì ê³µíë" ë°©ìì¼ë¡ 구íëì´ì¼ íë¤ê³ ì구íê³ ììµëë¤. ë°ë¼ì ë´ë¶ì ì¼ë¡ í´ì í ì´ë¸(O(1) ì¡°í), ê²ì í¸ë¦¬(O(log(N)) ì¡°í) ëë ë³µì¡ì±ì´ O(N)ë³´ë¤ ì¢ì ë¤ë¥¸ ë°ì´í° êµ¬ì¡°ë¡ ííí ì ììµëë¤.
ê° ëë±ì±
ê° ëì¼ì±ì ëì¼ ê° ì ë¡ ëë± ìê³ ë¦¬ì¦ì 기ë°ì¼ë¡ í©ëë¤. (ì´ì ìë 0ê³¼ -0ì ë¤ë¥¸ ê°ì¼ë¡ ì·¨ê¸íë ëì¼ ê° ëë±ë¥¼ ì¬ì©íìµëë¤. ë¸ë¼ì°ì í¸íì±ì íì¸íì¸ì.) ì¦, === ì°ì°ìì ì미ì ë°ë¼ NaNì NaNê³¼ ëì¼íê² ê°ì£¼ëë©°(NaN !== NaNììë ë¶êµ¬íê³ ) ë¤ë¥¸ 모ë ê°ì ëì¼íê² ê°ì£¼ë©ëë¤. ëí ê°ì²´ í¤ì ê²½ì° ëì¼ì±ì ê°ì²´ì ìë³ì±(참조)ì 기ë°í©ëë¤. ì¦, ê°ì²´ë ê°ì´ ìëë¼ ì°¸ì¡°ë¡ ë¹êµë©ëë¤. ììë Set ê°ì²´ ì¬ì©í기를 ì°¸ê³ íì¸ì.
ì±ë¥
has ë©ìëë ì´ì ì Setì ì¶ê°ë ëë¶ë¶ì ìì를 ìííë ê²ë³´ë¤ íê· ì ì¼ë¡ ë¹ ë¥¸ ì ê·¼ ë°©ìì ì¬ì©íì¬ ê°ì´ Setì ìëì§ ì¬ë¶ë¥¼ íì¸í©ëë¤. í¹í ë°°ì´ì lengthê° Setì sizeì ê°ì ë Array.prototype.includes ë©ìëë³´ë¤ íê· ì ì¼ë¡ ë ë¹ ë¦
ëë¤.
Set 구ì±
Set ê°ì²´ë ìí ì°ì°ê³¼ ê°ì´ ì§í©ì 구ì±í ì ìë ëª ê°ì§ ë©ìë를 ì ê³µí©ëë¤. ì´ë¬í ë©ìëë ë¤ìê³¼ ê°ìµëë¤.
| ë©ìë | ë°í ì í | ìíì ëì¹ | 벤 ë¤ì´ì´ê·¸ë¨ |
|---|---|---|---|
A.difference(B) |
Set |
||
A.intersection(B) |
Set |
||
A.symmetricDifference(B) |
Set |
||
A.union(B) |
Set |
||
A.isDisjointFrom(B) |
Boolean |
||
A.isSubsetOf(B) |
Boolean |
||
A.isSupersetOf(B) |
Boolean |
ì´ ë©ìëë¤ì ì¼ë°í ê°ë¥ì±ì ëì´ê¸° ìí´ Set ê°ì²´ë¿ë§ ìëë¼ ì ì¬ Setì¸ ëª¨ë ê°ì²´ë¥¼ íì©í©ëë¤.
ì ì¬ Set ê°ì²´(Set-like objects)
모ë Set êµ¬ì± ë©ìëë thisê° ì¤ì Set ì¸ì¤í´ì¤ì¬ì¼ íì§ë§, ì¸ìë Setê³¼ ì ì¬íë©´ ë©ëë¤. ì ì¬ Set ê°ì²´ë ë¤ìì ì ê³µíë ê°ì²´ì
ëë¤.
- ì«ìê°ì ê°ì§
sizeìì± - ìì를 ì·¨íê³ ë¶ì¸ì ë°ííë
has()ë©ìë - Setì ììì ëí ë°ë³µì를 ë°ííë
keys()ë©ìë
ì를 ë¤ì´ Map ê°ì²´ë size, has(), keys()ë ê°ì§ê³ ì기 ë문ì Setì ë©ìë를 ì¬ì©íìë ìëì²ë¼ í¤ Setì²ë¼ ëìí©ëë¤.
const a = new Set([1, 2, 3]);
const b = new Map([
[1, "one"],
[2, "two"],
[4, "four"],
]);
console.log(a.union(b)); // Set(4) {1, 2, 3, 4}
ì°¸ê³ :
ì ì¬ Set íë¡í ì½ì ìì를 ìì±í기 ìí´ [Symbol.iterator]() ëì keys() ë©ìë를 í¸ì¶í©ëë¤. ì´ë ë§µì ê²½ì° ë°ë³µìë entries를 ìì±íì§ë§ has() ë©ìëë keys를 ì·¨í기 ë문ì ë§µì ì í¨í ì ì Set ê°ì²´ë¡ ë§ë¤ê¸° ìí´ìì
ëë¤.
ë°°ì´ì has() ë©ìëë size ìì±ì´ ìê³ keys() ë©ìëê° ìì ëì ì¸ë±ì¤ë¥¼ ìì±í기 ë문ì ì ì¬ Setì´ ìëëë¤. WeakSet ê°ì²´ ìì keys() ë©ìëê° ì기 ë문ì ì ì¬ Setì´ ìëëë¤.
ì ì¬ Set ë¸ë¼ì°ì API
ë¸ë¼ì°ì Setê³¼ ì ì¬í ê°ì²´(ëë "ì ì¬ Set ê°ì²´")ë Setì²ë¼ ì¬ë¬ ê°ì§ ë°©ìì¼ë¡ ëìíë ì¹ API ì¸í°íì´ì¤ì
ëë¤.
Setê³¼ ë§ì°¬ê°ì§ë¡ ììë ê°ì²´ì ì¶ê°í ììëë¡ ìíí ì ììµëë¤. ì ì¬ Set ê°ì²´ì Setìë ëì¼í ì´ë¦ê³¼ ëìì ê³µì íë ìì±ì ë©ìëë ììµëë¤. ê·¸ë¬ë Setê³¼ ë¬ë¦¬ ê° í목ì ëí´ ë¯¸ë¦¬ ì ìë í¹ì ì íë§ íì©í©ëë¤.
íì©ëë ì íì ëª
ì¸ IDL ì ìì ì¤ì ëì´ ììµëë¤.
ì를 ë¤ì´ GPUSupportedFeaturesë í¤/ê°ì¼ë¡ 문ìì´ì ì¬ì©í´ì¼ íë ì ì¬ Set ê°ì²´ì
ëë¤.
ì´ë ìë ì¬ì IDLì ì ìëì´ ììµëë¤.
interface GPUSupportedFeatures {
readonly setlike<DOMString>;
};
ì ì¬ Set ê°ì²´ë ì½ê¸° ì ì©ì´ê±°ë ì½ê¸°-ì°ê¸° ê°ë¥í©ëë¤(ìì IDLìì readonly í¤ìë 참조).
- ì½ê¸° ì ì©
Setì ì¬ ê°ì²´ìësizeìì±ê³¼ ë©ìëentries(),forEach(),has(),keys(),values(),Symbol.iterator()ê° ììµëë¤. - ì°ê¸° ê°ë¥í
Setì ì¬ ê°ì²´ìë ì¶ê°ì ì¼ë¡clear(),delete(),add()ë©ìëê° ììµëë¤.
ë©ìëì ìì±ì í목ì ì íì ëí ì íì ì ì¸íê³ ë Setì ëë±í ê°ì²´ì²ë¼ ëì¼í ëìì í©ëë¤.
ìëë ì½ê¸° ì ì©ì¸ ì ì¬ Set ë¸ë¼ì°ì ê°ì²´ì ìì
ëë¤.
ìëë ì°ê¸° ê°ë¥í ì ì¬ Set ë¸ë¼ì°ì ê°ì²´ì ìì
ëë¤.
ìì±ì
Set()-
ìë¡ì´
Setê°ì²´ë¥¼ ìì±í©ëë¤.
ì ì ìì±
Set[Symbol.species]-
íì ê°ì²´ë¥¼ ìì±íë ë° ì¬ì©ëë ìì±ì í¨ìì ëë¤.
ì¸ì¤í´ì¤ ìì±
ìë ìì±ì Set.prototypeì ì ìëë©° 모ë Set ì¸ì¤í´ì¤ìì ê³µì ë©ëë¤.
Set.prototype.constructor-
ì¸ì¤í´ì¤ ê°ì²´ë¥¼ ìì±í ìì±ì í¨ìì ëë¤.
Setì¸ì¤í´ì¤ì ê²½ì° ì´ê¸° ê°ìSetìì±ìì ëë¤. Set.prototype.size-
Setê°ì²´ì ìë ê°ì ì를 ë°íí©ëë¤. Set.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]ìì±ì ì´ê¸° ê°ì 문ìì´"Set"ì ëë¤. ì´ ìì±ìObject.prototype.toString()ìì ì¬ì©í©ëë¤.
ì¸ì¤í´ì¤ ë©ìë
Set.prototype.add()-
Setê°ì²´ì ê°ì ê°ì´ ìì§ ìë¤ë©´ í´ë¹Setê°ì²´ì í¹ì ê°ì ê°ì§ ìë¡ì´ ìì를 ì½ì í©ëë¤. Set.prototype.clear()-
Setê°ì²´ìì 모ë ìì를 ì ê±°í©ëë¤. Set.prototype.delete()-
valueì ì°ê²°ë ìì를 ì ê±°íê³ ììê° ì±ê³µì ì¼ë¡ ì ê±°ëìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ì¸ì ë°íí©ëë¤.Set.prototype.has(value)ë ì´ífalse를 ë°íí©ëë¤. Set.prototype.difference()-
íëì Setì ë°ìì 주ì´ì§ Set ìì¼ë ì´ ì¸ì¤í´ì¤ì Setìë ìë ììê° í¬í¨ë ìë¡ì´ Setì ë°íí©ëë¤.
Set.prototype.entries()-
Setê°ì²´ì ê° ììì ëí´ ì½ì ììëë¡[value, value]ë°°ì´ ì í¬í¨íë ì ë°ë³µì ê°ì²´ë¥¼ ë°íí©ëë¤. ì´ëMapê°ì²´ì ì ì¬íë¯ë¡ ê° í목ì í¤ëSetì ê°ê³¼ ëì¼í©ëë¤. Set.prototype.forEach()-
Setê°ì²´ì ìë ê° ê°ì ëí´ ì½ì ììëë¡callbackFnì í ë²ì© í¸ì¶í©ëë¤.thisArg매ê°ë³ìê° ì£¼ì´ì§ë¤ë©´,callbackFnì í¸ì¶í ëë§ë¤ ì´ ë§¤ê°ë³ìê°thisê°ì¼ë¡ ì¬ì©ë©ëë¤. Set.prototype.has()-
주ì´ì§ ê°ì ê°ì§ ììê°
Setê°ì²´ ë´ ì¡´ì¬ ì¬ë¶ë¥¼ ëíë´ë ë¶ì¸ì ë°íí©ëë¤. Set.prototype.intersection()-
íëì Setì ë°ì ì´ Setê³¼ 주ì´ì§ Setì ìì를 모ë í¬í¨íë ì Setì ë°íí©ëë¤.
Set.prototype.isDisjointFrom()-
íëì Setì ë°ì 주ì´ì§ Setê³¼ ì´ Set ê°ì ê³µíµ ììê° ìëì§ë¥¼ ê°ë¦¬í¤ë ë¶ì¸ì ë°íí©ëë¤.
Set.prototype.isSubsetOf()-
íëì Setì ë°ì ì´ Setì 모ë ììê° ì£¼ì´ì§ Set ìì ìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ì¸ì ë°íí©ëë¤.
Set.prototype.isSupersetOf()-
íëì Setì ë°ì 주ì´ì§ Setì 모ë ììê° ì´ Set ìì ìëì§ ì¬ë¶ë¥¼ ëíë´ë ë¶ì¸ì ë°íí©ëë¤.
Set.prototype.keys()-
Set.prototype.values()ì ë³ì¹ì ëë¤. Set.prototype.symmetricDifference()-
íëì Setì ë°ì ì´ Setê³¼ 주ì´ì§ Set 모ëì ìí ìì를 ì ì¸íê³ ì£¼ì´ì§ Set í¹ì ì´ Setìë§ ìë ììê° ìí´ìë ìë¡ì´ Setì ë°íí©ëë¤.
Set.prototype.union()-
íëì Setì ë°ì ì´ Setê³¼ 주ì´ì§ Set 모ë í¹ì íëë§ ìí´ìë ììê° ë¤ì´ìë ìë¡ì´ Setì ë°íí©ëë¤.
Set.prototype.values()-
Setê°ì²´ ë´ì ê° ììì ê°ì ì½ì ììëë¡ yieldíë ìë¡ì´ ë°ë³µì ê°ì²´ë¥¼ 리í´í©ëë¤. [Symbol.iterator]()-
Setê°ì²´ ë´ì ê° ìì를 ì½ì ììëë¡ yieldíë ìë¡ì´ ë°ë³µì ê°ì²´ë¥¼ ë°íí©ëë¤.
ìì
>Set ê°ì²´ ì¬ì©í기
const mySet1 = new Set();
mySet1.add(1); // Set(1) { 1 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add(5); // Set(2) { 1, 5 }
mySet1.add("some text"); // Set(3) { 1, 5, 'some text' }
const o = { a: 1, b: 2 };
mySet1.add(o);
mySet1.add({ a: 1, b: 2 }); // o ë ë¤ë¥¸ ê°ì²´ë¥¼ 참조íê³ ì기 ë문ì ì´ë ê´ì°®ìµëë¤
mySet1.has(1); // true
mySet1.has(3); // false, 3 ì´ setì ì¶ê°ëì§ ìì기 ë문ì
ëë¤.
mySet1.has(5); // true
mySet1.has(Math.sqrt(25)); // true
mySet1.has("Some Text".toLowerCase()); // true
mySet1.has(o); // true
mySet1.size; // 5
mySet1.delete(5); // setìì 5 ì ê±°
mySet1.has(5); // false, 5 ë ì ê±°ëììµëë¤.
mySet1.size; // 4, ë§ íë를 ì ê±°í기 ë문ì
mySet1.add(5); // Set(5) { 1, 'some text', {...}, {...}, 5 } - ì´ì ì ìì ë ìì´í
ì´ ìë¡ì´ ìì´í
ì¼ë¡ ì¶ê°ëë, ìì ì ìë ìì¹ë¥¼ ì ì§íì§ ëª»í©ëë¤.
console.log(mySet1); // Set(5) { 1, "some text", {â¦}, {â¦}, 5 }
set ìíí기
setì ìì를 ì½ì ììëë¡ ìíí©ëë¤.
for (const item of mySet1) {
console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5
for (const item of mySet1.keys()) {
console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5
for (const item of mySet1.values()) {
console.log(item);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5
// í¤ì ê°ì ì¬ê¸°ì ê°ìµëë¤.
for (const [key, value] of mySet1.entries()) {
console.log(key);
}
// 1, "some text", { "a": 1, "b": 2 }, { "a": 1, "b": 2 }, 5
// Array.fromì ì¬ì©íì¬ Set ê°ì²´ë¥¼ ë°°ì´ ê°ì²´ë¡ ë³ê²½
const myArr = Array.from(mySet1); // [1, "some text", {"a": 1, "b": 2}, {"a": 1, "b": 2}, 5]
// ìë ì½ëë HTML 문ììì ìíë ë ëìí©ëë¤.
mySet1.add(document.body);
mySet1.has(document.querySelector("body")); // true
// Setê³¼ ë°°ì´ê°ì ë³ê²½
const mySet2 = new Set([1, 2, 3, 4]);
console.log(mySet2.size); // 4
console.log([...mySet2]); // [1, 2, 3, 4]
// êµì§í©(intersection)ì ìëì²ë¼ ì뮬ë ì´ì
ê°ë¥í©ëë¤.
const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));
// ì°¨ì§í©(difference)ì ìëì²ë¼ ì뮬ë ì´ì
ê°ë¥í©ëë¤.
const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));
// Setì´ ê°ì§ ê°ì²´ë¥¼ forEach()를 ì¬ì©íì¬ ìí
mySet2.forEach((value) => {
console.log(value);
});
// 1
// 2
// 3
// 4
기본ì ì¸ Set ì°ì° 구íí기
function isSuperset(set, subset) {
for (const elem of subset) {
if (!set.has(elem)) {
return false;
}
}
return true;
}
function union(setA, setB) {
const _union = new Set(setA);
for (const elem of setB) {
_union.add(elem);
}
return _union;
}
function intersection(setA, setB) {
const _intersection = new Set();
for (const elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
function symmetricDifference(setA, setB) {
const _difference = new Set(setA);
for (const elem of setB) {
if (_difference.has(elem)) {
_difference.delete(elem);
} else {
_difference.add(elem);
}
}
return _difference;
}
function difference(setA, setB) {
const _difference = new Set(setA);
for (const elem of setB) {
_difference.delete(elem);
}
return _difference;
}
// ìì
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([2, 3]);
const setC = new Set([3, 4, 5, 6]);
isSuperset(setA, setB); // true ë°í
union(setA, setC); // Set {1, 2, 3, 4, 5, 6} ë°í
intersection(setA, setC); // Set {3, 4} ë°í
symmetricDifference(setA, setC); // Set {1, 2, 5, 6} ë°í
difference(setA, setC); // Set {1, 2} ë°í
ë°°ì´ê³¼ì ê´ê³
const myArray = ["value1", "value2", "value3"];
// Set ìì±ì를 ì¬ì©íì¬ ë°°ì´ì Setì¼ë¡ ë³í
const mySet = new Set(myArray);
mySet.has("value1"); // returns true
// ì ê° êµ¬ë¬¸ì ì¬ì©íì¬ setì ë°°ì´ë¡ ë³í
console.log([...mySet]); // Will show you exactly the same Array as myArray
ë°°ì´ìì ì¤ë³µ ìì ì ê±°í기
// ë°°ì´ìì ì¤ë³µ ìì를 ì ê±°í기 ìí´ ì¬ì©
const numbers = [2, 13, 4, 4, 2, 13, 13, 4, 4, 5, 5, 6, 6, 7, 5, 32, 13, 4, 5];
console.log([...new Set(numbers)]); // [2, 13, 4, 5, 6, 7, 32]
문ìì´ê³¼ì ê´ê³
// ëì문ì 구문 (setì "F"ì "f"를 모ë ê°ì§ê² ë¨)
new Set("Firefox"); // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]
// ì¤ë³µ 문ìì´ì ìëµ ("f"ë 문ìì´ìì 2ë² ëíë기ì, setì íëë§ ê°ì§ê² ë¨)
new Set("firefox"); // Set(6) [ "f", "i", "r", "e", "o", "x" ]
Set를 ì¬ì©íì¬ ê° ëª©ë¡ì ê³ ì ì±ì ë³´ì¥íë ë°©ë²
const array = Array.from(document.querySelectorAll("[id]")).map((e) => e.id);
const set = new Set(array);
console.assert(set.size === array.length);
ëª ì¸ì
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-set-objects > |