자바스크립트에서 데이터 컨테이너로써의 관점에서 데이터를 순회하는 코드를 정리합니다.
먼저 Array입니다.
const arr = new Array(1, 2, 3, 4, 5) console.log('Array Iteration 1') for (let i = 0; i < arr.length; i++) { console.log(arr[i]) } console.log('Array Iteration 2') arr.forEach(v => { console.log(v) }) console.log('Array Iteration 3') for (let v of arr) { console.log(v) } console.log('Array Iteration 4') for (let i in arr) { console.log(arr[i]) }
다음은 Set입니다.
const set = new Set([1, 2, 3, 4, 'Hello']) console.log('Set Iteration 1') for (let v of set) { console.log(v) } console.log('Set Iteration 2') for (let v of set.values()) { console.log(v) } console.log('Set Iteration 3') set.forEach(v => { console.log(v) });
다음은 Object입니다.
const obj = { a: 1, b: 2, c: 3, 9: 4, e: 'Hello' } console.log('Object Iteration 1') const keys = Object.keys(obj) // [ 'a', 'b', 'c', '9', 'e' ] for (let i = 0; i < keys.length; i++) { const k = keys[i] const v = obj[k] console.log(k, v) } console.log('Object Iteration 2') const values = Object.values(obj) // [ 1, 2, 3, 4, 'Hello' ] for (let i = 0; i < values.length; i++) { const v = values[i] console.log(v) } console.log('Object Iteration 3') const entries = Object.entries(obj) // [ ['a', 1], ['b', 2], ['c', 3], ['9', 4], ['e', 'Hello'] ] for (let i = 0; i < entries.length; i++) { const k = entries[i][0] const v = entries[i][1] console.log(k, v) } console.log('Object Iteration 4') for (let k in obj) { const v = obj[k] console.log(k, v) }
끝으로 Map입니다.
const map = new Map( [ ['a', 1], ['b', 2], ['c', 3], ['9', 4], ['e', 'Hello'] ]) console.log('Map Iteration 1') for (let [k, v] of map) { console.log(k, v) } console.log('Map Iteration 2') for (let k of map.keys()) { console.log(k, map.get(k)) } console.log('Map Iteration 3') for (let v of map.values()) { console.log(v) } console.log('Map Iteration 4') for (let [k, v] of map.entries()) { console.log(k, v) } console.log('Map Iteration 5') map.forEach(function(v, k) { console.log(k, v) })
사실 Map의 출현으로 더 이상 Object를 데이터 컨테이너로써 사용하는 것은 옳지 않습니다. Object는 기본적으로 생성될 때 기본 키값을 갖지만 Map은 개발자가 추가하지 않은 데이터는 갖지 않습니다. 또한 Map의 Key는 문자열 객체 이외에도 타입도 가능합니다. 또한 저장한 순서대로 값을 얻을 수 있으며 데이터의 개수도 size 함수를 통해 바로 얻을 수 있습니다. 게다가 Map은 데이터의 추가와 삭제 시 Object보다 성능이 뛰어납니다.