Set 오브젝트는
[value1,,, valueN] 형태로 작성
const obj = new Set([
1, 2, "ABC"
]);
log(`size: ${obj.size}`);
for (let value of obj){
log(value);
};
// size: 3
// 1
// 2
// ABC
const obj = new Set([
1, 2, 1, [], {}
]);
log(`size: ${obj.size}`);
for (let size of obj){
log(value);
};
// size: 4
// 1
// 2
// []
// {}
size 프로퍼티
Set 오브젝트 구조
// Set 오브젝트 구조
const set = Set;
/*
1. Set 오브젝트에 Symbol(Symbol.species)가 있음
- 따라서, constructor를 오버라이드할 수 있음
2. prototype을 펼치면 Symbol.iterator가 있음
*/
const obj = new Set([
"one", "two"
]);
/*
1. 오른쪽의 obj를 펼치면 [[Entries]]가 있음
2. [[Entries]]를 펼치면 0: "one" 형태
3. 인덱스를 부여하여 key로 사용하고 "one", "two"를 value로 설정
4. 인덱스를 부여하는 구조는 Map과 같음
5. 인덱스를 부여하여 저장하므로 작성한 순서로 읽힘
*/
Map: key와 value 작성
Set: value만 작성
let obj = new Set();
obj.add("축구").add("농구");
obj.add("축구");
for (let value of obj){
log(value);
};
// 축구
// 농구
// 함수를 생성하여 value로 사용
let obj = new Set();
obj.add(function sports(){ return 100; });
obj.add(function sports(){ return 200; });
for (let value of obj) {
log(value());
};
// 100
// 200
// value에 생성한 함수 이름 작성
const sports = () => { return 100; };
let obj = new Set();
obj.add(sports);
obj.add(sports);
for (let value of obj){
log(value());
};
// 100
// Object를 value로 사용
const sports = {
"축구": 11, "야구": 9
};
let obj = new Set();
obj.add(sports);
for (let value of obj){
log(value);
};
// {축구: 11, 야구: 9}
const sports = () => {};
const obj = new Set([
sports
]);
log(obj.has(sports));
log(obj.has("book"));
// true
// false
const obj = new Set([
"one", () => {}
]);
const iterObj = obj.entries();
log(iterObj.next());
log(iterObj.next());
log(iterObj.next());
// {value: [one,one], done: false}
// {value: [() => {},() => {}], done: false}
// {value: undefined, done: true}
value가 key가 되므로
Set 인스턴스의 value를 key로 사용하여 이터레이터 오브젝트 생성, 반환
next()로 value(key) 반환
const obj = new Set([
"one", () => {}
]);
const iterObj = obj.keys();
log(iterObj.next());
log(iterObj.next());
log(iterObj.next());
// {value: one, done: false}
// {value: () => {}, done: false}
// {value: undefined, done: true}
Set 인스턴스의 value로 이터레이터 오브젝트 생성, 반환
next()로 value 반환
const obj = new Set([
"one", () => {}
]);
const iterObj = obj.values();
log(iterObj.next());
log(iterObj.next());
// {value: one, done: false}
// {value: () => {}, done: false}
// {values: undefined, done: true}
const obj = new Set([
"one", () => {}
]);
const iter = obj[Symbol.iterator]();
log(iter.next());
log(iter.next());
log(iter.next());
// {value: one, done: false}
// {value: () => {}, done: false}
// {value: undefined, done: true}
// value, key(value), Set 인스턴스
const obj = new Set([
"one", () => {}
]);
function callback(value, key, set){
log(value);
};
obj.forEach(callback);
// one
// () => {}
// 콜백 함수에서 this 사용
const obj = new Set([
"one", "two"
]);
function callback(value, key, set){
log(`${value}, ${this.check}`);
};
obj.forEach(callback, {check: "ABC"});
// one, ABC
// two, ABC
Set 인스턴스에서 파라미터 값과 같은 엘리먼트 삭제
같은 value가 있어 삭제에 성공하면 true 반환
const obj = new Set([
"one", "two"
]);
log(obj.delete("one"));
log(obj.delete("one"));
// true
// false
const obj = new Set([
"one", "two"
]);
log(obj.size);
obj.clear();
log(obj.size);
obj.add("one");
log(obj.size);
// 2
// 0
// 1