자바스크립트 고급 프로그래밍 6장 독서 공유 - Map&Set

JavaScript Advanced Programming (4th Edition) 읽기 공유 노트 녹음

이제 막 시작하는 동지들에게 적용

 지도

ECMAScript 6         의 새로운 기능인 Map은 진정한 키/값 스토리지를 언어에 제공하는 새로운 컬렉션 유형입니다. Map의 대부분의 기능은 Object 유형으로 구현할 수 있지만 둘 사이에는 여전히 약간의 미묘한 차이가 있습니다.

  • new 키워드와 Map 생성자를 사용하여 빈 맵을 만들 수 있습니다.
const m = new Map()

중첩 배열로 맵 초기화 

// 使用嵌套数组初始化映射
 const m1 = new Map([ 
  ["key1", "val1"], 
  ["key2", "val2"], 
  ["key3", "val3"] 
 ]);
  • 방법: set(), get(), has(), delete(), clear()

  • set() 메서드는 매핑 인스턴스를 반환하므로 여러 작업을 연결할 수 있습니다.
  • 속성: 크기
const m = new Map()

m.set('age',18)

//has()方法,如果存在键值就返回发生true,不存在就返回false
console.log( m.has('firstName') )  //false
console.log( m.has('age') ) // true

//get()方法,如果存在键值就返回键对应的值,不存在就返回undefined
console.log( m.get('firstName') ) //undefained
console.log( m.get('age') ) //18

//set()方法可以链式操作,set(键,值)
m.set("firstName", "Matt").set("lastName", "Frisbie")

//size属性
console.log(m.size) // 3

//delete()方法,删除某个键值对
m.delete('age')
console.log( m.has('age') ) // false
console.log(m.size) // 2

//clear()方法,清空对象
m.clear()
console.log(m.size) // 0


  • 숫자 값, 문자열 또는 기호만 키로 사용할 수 있는 Object 와 달리 Map 은 모든 JavaScript 데이터 유형을 키로 사용할 수 있습니다.
const m = new Map(); 


const functionKey = function() {}; 
const symbolKey = Symbol(); 
const objectKey = new Object(); 


m.set(functionKey, "functionValue"); 
m.set(symbolKey, "symbolValue"); 
m.set(objectKey, "objectValue"); 

alert(m.get(functionKey)); // functionValue 
alert(m.get(symbolKey)); // symbolValue 
alert(m.get(objectKey)); // objectValue
  • 시퀀스 및 반복

entry() 메서드(또는 entries() 를 참조하는 Symbol.iterator 속성)를 통해 이 반복자를 가져옵니다.
const m = new Map([ 
 ["key1", "val1"], 
 ["key2", "val2"], 
 ["key3", "val3"] 
]); 

alert(m.entries === m[Symbol.iterator]); // true 


for (let pair of m.entries()) { 
 alert(pair); 
} 
// [key1,val1] 
// [key2,val2] 
// [key3,val3] 


for (let pair of m[Symbol.iterator]()) { 
 alert(pair); 
} 
// [key1,val1] 
// [key2,val2] 
// [key3,val3]
keys() values()는 각각 삽입 순서대로 키와 값을 생성하는 반복자를 반환합니다.
const m = new Map([ 
 ["key1", "val1"], 
 ["key2", "val2"], 
 ["key3", "val3"] 
]); 

for (let key of m.keys()) { 
 console.log(key); 
} 
// key1 
// key2 
// key3 

for (let key of m.values()) { 
 console.log(key); 
} 
// value1 
// value2 
// value3

객체와 지도의 비교

  • 메모리 사용량
        Object 및 Map 의 엔지니어링 수준 구현은 브라우저마다 크게 다르지만 단일 키/값 쌍을 저장하는 데 사용되는 메모리 양은 키 수에 따라 선형적으로 증가합니다 . 그러나 고정된 크기의 메모리가 주어지면 Map은 Object 보다 약 50% 더 많은 / 값 쌍을 저장할 수 있습니다 .
  • 삽입 성능
        Object 및 Map 에 새 키 / 값 쌍을 삽입하는 비용은 거의 동일 하지만 Map 에 삽입하는 것이 일반적으로 모든 브라우저에서 약간 더 빠릅니다 . 코드에 많은 삽입 작업이 포함된 경우 분명히 Map의 성능이 더 좋습니다.
  • 검색 속도
        삽입과 달리 큰 Object Map 에서 키 / 값 쌍을 찾는 성능 차이는 미미하지만 적은 수의 키 / 값 쌍만 포함하는 경우 Object 가 더 빠를 때도 있습니다.
  • 실적 삭제
코드에 많은 삭제 작업이 포함된 경우 맵을 선택해야 한다는 데 의심의 여지가 없습니다.

세트

        ECMAScript 6의 새로운 Set은 컬렉션 데이터 구조를 언어로 가져오는 새로운 컬렉션 유형입니다 . 집합은 대부분의 API 와 동작이 공통적 이라는 점에서 향상된 지도와 여러 면에서 비슷합니다 .
new 키워드와 Set 생성자를 사용하여 빈 컬렉션을 만들 수 있습니다 .
const m = new Set();
배열로 컬렉션 초기화
// 使用数组初始化集合 
const s1 = new Set(["val1", "val2", "val3"]);

 메소드 속성

방법: add(), has(), delete(), clear()

속성: 크기

const s = new Set();

s.add('Tom')

//has()  
console.log(s.has('Jerry')) //false
console.log(s.has('Tom')) //true

//size
console.log(s.size) // 1

//add()
s.add('Jerry').add('Mary')
console.log(s.size) // 3

//delete()
s.delete('Tom') 
console.log(s.size) // 2

//clear()
s.clear()
console.log(s.size) // 0

시퀀스 및 반복

호출된 반복 메서드는 맵과 일치합니다.
const s = new Set(["val1", "val2", "val3"]); 
for (let pair of s.entries()) { 
 console.log(pair); 
} 
// ["val1", "val1"] 
// ["val2", "val2"] 
// ["val3", "val3"]

Supongo que te gusta

Origin blog.csdn.net/weixin_42307283/article/details/129240665
Recomendado
Clasificación