[JavaScript] Map

1 분 소요

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());

http://dl.dropbox.com/s/7eb2yya45p6j664/JavaScript-Map-1.png


위 출력창에서 확인할 수 있듯이, next() 함수는 valuedone 이라는 변수 이름과 값을 속성으로 갖는 객체를 반환한다.

iterator 객체의 next() 에 점(.)을 찍어보면, donevalue 라는 변수를 확인할 수 있다.

http://dl.dropbox.com/s/ihiuxtw0wufs77v/JavaScript-Map-2.png

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);
}

http://dl.dropbox.com/s/j0gr933rjujpjep/JavaScript-Map-3.png


forEach()

배열에서처럼 forEach() 메소드를 사용해 Map 을 순회할 수도 있다.

const map = new Map([
  [1, "A"],
  [2, "B"],
  [3, "C"],
]);

map.forEach((value, key) => {
  console.log("key : " + key + ", value : " + value);
});

카테고리:

업데이트:

댓글남기기