객체에서 키, 값을 가져올때
변수명.keys , values가 아니라
Object.keys 이런게 불만이었다
근데 이거 불만을 들어주겠다고 내놓은게 업데이트는 안하고 Map이란걸 만들었다
https://maxkim-j.github.io/posts/js-map
let m = new Map();
// Map에 값을 넣기
m.set('하나', '1');
m.set(1, '하나');
m.set(true, 1);
m.set(false, 0);
// Map의 값에 접근하기
console.log(m.get('하나'));
console.log(m.get(true));
// Map의 값이 있는지 확인하기
console.log(m.has('하나'));
// Map의 값을 제거하기
console.log(m.delete('하나'));
console.log(m.has('하나'));
console.log(m);
// Map의 크기를 확인하기
console.log(m.size);
// let mm = new Map()
// mm.set('하나', m)
// Map(1) {'하나' => Map(3)}
// mm.set('하나', {'one':1, 'two':2})
// Map(1) {'하나' => {…}}
활용법
// Map의 순환
for (var variable of m) {
console.log(`m을 순회하고 있습니다. ${variable[0]}`)
console.log(`m을 순회하고 있습니다. ${variable[1]}`)
}
// Map의 값에 접근
console.log(m.keys());
console.log(m.values());
console.log(m.entries());
// 인덱스를 가지는 자료형을 맵핑하기
let temp = new Map([[1, 10],
[2, 20],
[3, 30],
[4, 40]]);
console.log(temp);
오브젝트랑 맵을 자주 비교하는데.. 오브젝트는 이터러블하지않고
Map은 이터러블(순회) 하다
Map 객체와 Object 는 둘 다 key - value 관계를 가진다는 점에서 비슷해보이지만 몇 가지 중요한 차이점이 있습니다
이 clear()메서드는 Map개체 에서 모든 요소를 제거 합니다.
clear()
var myMap = new Map();
myMap.set('bar', 'baz');
myMap.set(1, 'foo');
myMap.size; // 2
myMap.has('bar'); // true
myMap.clear();
myMap.size; // 0
myMap.has('bar') // false
이 delete()메서드는 Map키로 개체 에서 지정된 요소를 제거합니다 .
delete(key)
const map1 = new Map();
map1.set('bar', 'foo');
console.log(map1.delete('bar'));
// expected result: true
// (true indicates successful removal)
console.log(map1.has('bar'));
// expected result: false
원본자체를 바꾼다
반환값 true Map개체 의 요소가 존재하고 제거된 경우 또는 false요소가 존재하지 않는 경우.
이 get()메서드는 Map개체 에서 지정된 요소를 반환 합니다.
get(key)
const map1 = new Map();
map1.set('bar', 'foo');
console.log(map1.get('bar'));
// expected output: "foo"
console.log(map1.get('baz'));
// expected output: undefined
반환값지정된 키와 연결된 요소 또는 개체 undefined에서 키를 찾을 수 없는 경우 Map.
has()메서드는 지정된 키가 있는 요소가 있는지 여부를 나타내는 부울을 반환합니다.
has(key)
const map1 = new Map();
map1.set('bar', 'foo');
console.log(map1.has('bar'));
// expected output: true
console.log(map1.has('baz'));
// expected output: false
반환값 지정된 키를 가진 요소가 Map객체에 존재하는 경우 true , 그렇지 않으면 false.
set()메서드는 지정된 키와 값이 있는 요소를 Map개체에 추가하거나 업데이트 합니다.
set(key, value)
let m = new Map();
// Map에 값을 넣기
m.set('하나', '1');
m.set(1, '하나');
m.set(true, 1);
m.set(false, 0);
m // {'하나' => '1', 1 => '하나', true => 1, false => 0}
반환값 현재 map을 반환
keys()메서드는 삽입 순서로 개체의 각 요소에 대한 키를 포함 하는 새 Iterator 개체를 반환합니다
keys()
var myMap = new Map();
myMap.set('0', 'foo');
myMap.set(1, 'bar');
myMap.set({}, 'baz');
var mapIter = myMap.keys();
console.log(mapIter.next().value); // "0"
console.log(mapIter.next().value); // 1
console.log(mapIter.next().value); // Object
mapIter //MapIterator {'0', 1, {…}}
반환값 새로운 Map반복자 객체.
values()메서드는 삽입 순서로 개체의 각 요소에 대한 값을 포함 하는 새 Iterator 개체를 반환합니다
values()
var myMap = new Map();
myMap.set('0', 'foo');
myMap.set(1, 'bar');
myMap.set({}, 'baz');
var mapIter = myMap.values();
console.log(mapIter.next().value); // "foo"
console.log(mapIter.next().value); // "bar"
console.log(mapIter.next().value); // "baz"
반환값 새로운 Map반복자 객체.
entries()메서드는 삽입 순서로 개체의 각 요소에 대한 쌍을 포함 하는 새 Iterator 개체를 반환합니다 . 이 특별한 경우 이 반복자 객체도 반복 가능하므로 for-of 루프를 사용할 수 있습니다.
entries()
const map1 = new Map();
map1.set('0', 'foo');
map1.set(1, 'bar');
const iterator1 = map1.entries();
iterator1//MapIterator {'0' => 'foo', 1 => 'bar'}
console.log(iterator1.next().value);
// expected output: ["0", "foo"]
console.log(iterator1.next().value);
// expected output: [1, "bar"]