ES6: 세트, WeakSet, 맵 및 WeakMap 검색
16039 단어 todayilearnedbeginnersjavascript
This article is an extract from my book: The Complete Guide to Modern JavaScript.
Get my ebook on Amazon and Leanpub
세트란 무엇입니까?
A
Set
는 모든 유형의 고유한 값을 저장할 수 있는 Object
입니다.// create our set
const family = new Set();
// add values to it
family.add("Dad");
console.log(family);
// Set [ "Dad" ]
family.add("Mom");
console.log(family);
// Set [ "Dad", "Mom" ]
family.add("Son");
console.log(family);
// Set [ "Dad", "Mom", "Son" ]
family.add("Dad");
console.log(family);
// Set [ "Dad", "Mom", "Son" ]
보시다시피 마지막에 "Dad"를 다시 추가하려고 했지만
Set
는 고유한 값만 가질 수 있기 때문에 Set
는 여전히 동일하게 유지되었습니다.동일한
Set
을 계속 사용하고 어떤 방법을 사용할 수 있는지 살펴보겠습니다.family.size;
// 3
family.keys();
// SetIterator {"Dad", "Mom", "Son"}
family.entries();
// SetIterator {"Dad", "Mom", "Son"}
family.values();
// SetIterator {"Dad", "Mom", "Son"}
family.delete("Dad");
family;
// Set [ "Mom", "Son" ]
family.clear;
family;
// Set []
보시다시피
Set
에는 size
속성이 있으며 여기에서 항목을 delete
사용하거나 clear
를 사용하여 모든 항목을 삭제할 수 있습니다.우리는 또한 a
Set
에 키가 없으므로 .keys()
를 호출할 때 .values()
또는 .entries()
를 호출하는 것과 동일한 결과를 얻습니다.집합에 대해 반복
Set
를 반복하는 두 가지 방법이 있습니다. .next()
를 사용하거나 for of
루프를 사용하는 것입니다.// using `.next()`
const iterator = family.values();
iterator.next();
// Object { value: "Dad", done: false }
iterator.next();
// Object { value: "Mom", done: false }
// using a `for of` loop
for(const person of family) {
console.log(person);
}
// Dad
// Mom
// Son
어레이에서 중복 제거
고유한 값만 보유할 수 있다는 것을 알기 때문에
Set
를 사용하여 배열에서 중복 항목을 제거할 수 있습니다.const myArray = ["dad", "mom", "son", "dad", "mom", "daughter"];
const set = new Set(myArray);
console.log(set);
// Set [ "dad", "mom", "son", "daughter" ]
// transform the `Set` into an Array
const uniqueArray = Array.from(set);
console.log(uniqueArray);
// Array [ "dad", "mom", "son", "daughter" ]
// write the same but in a single line
const uniqueArray = Array.from(new Set(myArray));
// Array [ "dad", "mom", "son", "daughter" ]
보시다시피 새 배열에는 원래 배열의 고유한 값만 포함됩니다.
WeakSet이란 무엇입니까?
A
WeakSet
는 aSet
와 유사하지만 객체만 포함할 수 있습니다.let dad = {name: "Daddy", age: 50};
let mom = {name: "Mummy", age: 45};
const family = new WeakSet([dad,mom]);
for(const person of family){
console.log(person);
}
// TypeError: family is not iterable
새
WeakSet
를 만들었지만 for of
루프를 사용하려고 했을 때 작동하지 않았고 WeakSet
를 반복할 수 없습니다.A
WeakSet
는 요소를 삭제한 후 자체적으로 정리됩니다.dad = null;
family;
// WeakSet [ {…}, {…} ]
// wait a few seconds
family;
// WeakSet [ {…} ]
보시다시피 몇 초 후에 아빠가 제거되고 쓰레기가 수거되었습니다. 값을
null
로 설정했을 때 참조가 손실되었기 때문에 발생했습니다.지도란 무엇입니까?
A
Map
는 a Set
와 유사하지만 키와 값 쌍이 있습니다.const family = new Map();
family.set("Dad", 40);
family.set("Mom", 50);
family.set("Son", 20);
family;
// Map { Dad → 40, Mom → 50, Son → 20 }
family.size;
// 3
family.forEach((key,val) => console.log(val,key));
// Dad 40
// Mom 50
// Son 20
for(const [key,val] of family){
console.log(key,val);
}
// Dad 40
// Mom 50
// Son 20
Set
루프로만 for of
를 반복할 수 있는 반면 Map
및 for of
루프를 모두 사용하여 forEach
를 반복할 수 있습니다.WeakMap이란 무엇입니까?
A
WeakMap
는 키/값 쌍의 모음이며 aWeakSet
와 유사하게 a WeakMap
에서도 키가 약하게 참조됩니다. 즉, 참조가 손실되면 값이 WeakMap
에서 제거됩니다. ) 및 가비지 수집.A
WeakMap
는 열거할 수 없으므로 반복할 수 없습니다.let dad = { name: "Daddy" };
let mom = { name: "Mommy" };
const myMap = new Map();
const myWeakMap = new WeakMap();
myMap.set(dad);
myWeakMap.set(mom);
dad = null;
mom = null;
myMap;
// Map(1) {{…}}
myWeakMap;
// WeakMap {}
보시다시피 엄마는 값을
null
로 설정한 후 아빠가 여전히 Map
안에 남아 있는 동안 가비지 수집되었습니다.읽어주셔서 대단히 감사합니다. 자세한 내용은 DevTo 또는 내 블로그inspiredwebdev.com에서 나를 팔로우하세요.
Amazon 및 Leanpub에서 내 전자책 받기
Reference
이 문제에 관하여(ES6: 세트, WeakSet, 맵 및 WeakMap 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/albertomontalesi/es6-discovering-sets-weaksets-maps-and-weakmaps-db2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)