맵 과 Set 데이터 구조
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.