자바스크립트에서 데이터 컨테이너로써의 관점에서 데이터를 순회하는 코드를 정리합니다.
먼저 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보다 성능이 뛰어납니다.