맵 과 Set 데이터 구조

3131 단어
Map
Js 의 Object 는 본질 적 으로 키 쌍 의 집합 이지 만 문자열 만 key 로 사용 할 수 있어 이 문 제 를 해결 하기 위해 ES6 에서 Map 데이터 구 조 를 제공 합 니 다.
맵 은 대상 과 유사 하고 키 값 이 맞 는 집합 이지 만 키 는 문자열 뿐만 아니 라 다양한 종류의 값 (대상 포함) 을 만 들 수 있 습 니 다.
Object 는 "문자열 - 값" 의 대응 이 고, Map 은 "값 - 값" 의 대응 이 며,
const m = new Map();

const o = { p: 'hello world'};

m.set(o,'content')

m.get(o);//content

m.has(o)//true

m.delete(o)//true

m.has(o);//false

위 에 set 방법 으로 대상 o 를 m 의 키 로 한 다음 get 으로 o 의 값 을 가 져 온 다음 이 키 를 삭제 합 니 다.
맵 도 하나의 배열 을 매개 변수 로 받 아들 일 수 있 습 니 다.이 배열 의 구성원 은 키 값 이 맞다 는 것 을 나타 내 는 배열 이다.
const map = new Map([

  ['name', '  '],

  ['title', 'Author']

]);

map.size // 2

map.has('name') // true

map.get('name') // "  "

map.has('title') // true

map.get('title') // "Author"

같은 키 에 여러 번 값 을 부여 하면 뒤의 값 은 앞의 값 을 덮어 씁 니 다.알 수 없 는 키 를 읽 으 면 undefined 로 돌아 갑 니 다.
같은 대상 에 대한 인용 만 이 맵 구 조 를 같은 키 로 볼 수 있 습 니 다.
var map = new Map();
//         ,         ,         
map.set(['a'], 555);
map.get(['a']) // undefined

같은 값 의 두 인 스 턴 스 는 Map 구조 에서 두 개의 키 로 여 겨 집 니 다.
//  k1 k2      ,     Map         
var map = new Map(); 
var k1 = ['a'];
var k2 = ['a']; 
map
.set(k1, 111)
.set(k2, 222); 
map.get(k1) // 111
map.get(k2) // 222

위 에서 알 수 있 듯 이 Map 의 키 는 실제 메모리 주소 와 연결 되 어 있 으 며 메모리 주소 가 다 르 면 두 개의 키 로 간주 된다.이것 은 동명 속성 충돌 문 제 를 해결 했다.map. size 속성 이 맵 구 조 를 되 돌려 주 는 구성원 총수 set (key, value) 방법 은 key set 방법 을 설정 하여 맵 자 체 를 되 돌려 주 므 로 체인 으로 쓸 수 있 습 니 다.get 방법 은 key 에 대응 하 는 키 값 을 읽 습 니 다. key 를 찾 지 못 하면 undefined 로 돌아 갑 니 다.has 방법 은 맵 데이터 구조 에 키 가 있 는 지 여 부 를 나타 내 는 불 값 을 되 돌려 줍 니 다.delete 방법 은 키 를 삭제 하고 트 루 로 돌아 갑 니 다.삭제 에 실패 하면 false 로 돌아 갑 니 다.clear 방법 은 모든 구성원 을 삭제 하고 값 을 되 돌려 주지 않 습 니 다.Map 원생 은 세 개의 스 트 리밍 기 생 성 함수 와 스 트 리밍 방법 을 제공 합 니 다.
keys (): 키 이름 의 달력 을 되 돌려 줍 니 다.values (): 키 값 을 되 돌려 주 는 달력 입 니 다.entries (): 모든 구성원 의 달력 을 되 돌려 줍 니 다.foreach (): 맵 을 옮 겨 다 니 는 모든 멤버.특히 주의해 야 할 것 은 맵 의 옮 겨 다 니 는 순 서 는 삽입 순서 다.
Map 구 조 를 배열 구조 로 바 꾸 는 비교적 빠 른 방법 은 확장 연산 자 (...) 를 결합 하여 사용 하 는 것 이다.
let map0 = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');

let map1 = new Map(
  [...map0].filter(([k, v]) => k < 3)
);
//   Map   {1 => 'a', 2 => 'b'}

let map2 = new Map(
  [...map0].map(([k, v]) => [k * 2, '_' + v])
    );
//   Map   {2 => '_a', 4 => '_b', 6 => '_c'}

배열 이 맵 으로 바 뀌 었 습 니 다.
new Map([[true, 7], [{foo: 3}, ['abc']]])
// Map {true => 7, Object {foo: 3} => ['abc']}

맵 대상
//    Map       ,       。
function strMapToObj(strMap) {
  let obj = Object.create(null);
  for (let [k,v] of strMap) {
    obj[k] = v;
  }
  return obj;
}

let myMap = new Map().set('yes', true).set('no', false);
strMapToObj(myMap)
// { yes: true, no: false }

Set

좋은 웹페이지 즐겨찾기