[JavaScript] Map
Map 순회
entries()
entries()
메소드는 Map 객체의 각 요소에 해당하는 [키, 값] 쌍을 Map 에 등록한 순서대로 포함한 Iterator 객체를 반환한다. 반환 받은 반복자를 통해서 아래 코드와 같이 Map 을 순회할 수 있다.
const map = new Map([
[1, "A"],
[2, "B"],
[3, "C"],
]);
const iterator = map.entries();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
위 출력창에서 확인할 수 있듯이, next()
함수는 value 와 done 이라는 변수 이름과 값을 속성으로 갖는 객체를 반환한다.
iterator 객체의 next() 에 점(.)을 찍어보면, done
과 value
라는 변수를 확인할 수 있다.
value
에는 해당 entry의 [키, 값] 쌍이 들어있다. 따라서 아래와 같이 [키, 값] 쌍을 뽑아낼 수 있다.
const [key, value] = iterator.next().value;
console.log("key: " + key + ", value: " + value); // key: 1, value: A
done
에는 반복자가 마지막 반복 작업을 마쳤나에 대한 정보가 불리언 값으로 들어있다. 반복자가 Map 의 마지막 요소의 그 다음을 접근해야지만 done 이 true 가 되는 모습을 위에서 확인할 수 있다.
Java 에서는 아래와 같이 반복자를 사용할 수 있다.
Map<Integer, Character> map = new HashMap<Integer, Character>() {{
put(1, 'A');
put(2, 'B');
put(3, 'C');
}};
Iterator<Integer> iterator = map.keySet().iterator();
while(iterator.hasNext()) {
int key = iterator.next();
System.out.println("key: " + key + ", value: " + map.get(key));
}
반면, Javascript 에는 비슷한 기능을 제공하는 함수가 없어, 변수 done 을 이용해 반복자가 마지막 요소까지 돌 수 있도록 코드를 구현할 수 있다.
const map = new Map([
[1, "A"],
[2, "B"],
[3, "C"],
]);
const iterator = map.entries();
while (true) {
const { value, done } = iterator.next();
if (done) break;
const [key, val] = value;
console.log("key: " + key + ", value: " + val);
}
forEach()
배열에서처럼 forEach()
메소드를 사용해 Map 을 순회할 수도 있다.
const map = new Map([
[1, "A"],
[2, "B"],
[3, "C"],
]);
map.forEach((value, key) => {
console.log("key : " + key + ", value : " + value);
});
댓글남기기