const firms = new Map()
.set(10, 'Ivie Group')
.set(23, 'Soundscaping Source')
.set(31, 'Big 6');
맵을 사용하면 정보를 계속 추가하고 삭제하는 작업이 수월하다.
또한 DB에서 세부 사항을 선택가능하며 이용할 수 있는지 확인하거나 비교차트를 만들 수 있다.
function checkConflicts(firms, isAvailable) {
// START:loop
const entries = [...firms];
for (let i = 0; i < entries.length; i++) {
const [id, name] = entries[i];
if (!isAvailable(id)) {
return `${name}는 사용할 수 없습니다`;
}
}
return '모든 회사를 사용할 수 있습니다';
// END:loop
}
export { checkConflicts };
컬렉션이 배열은 아니여서 for문을 사용할 수 없다. 반복을 시작하기 전 펼침연산자를 사용하여 맵을 배열로 변환해야 한다.
function checkConflicts(firms, isAvailable) {
// START:reduce
const message = [...firms].reduce((availability, firm) => {
const [id, name] = firm;
if (!isAvailable(id)) {
return `${name}는 사용할 수 없습니다`;
}
return availability;
}, '모든 회사를 사용할 수 있습니다');
return message;
// END:reduce
}
적합한 배열 메서드가 없을 때 reduce() 메서드에서 기본값으로 성공메세지를 보낼 수 있다.
function findConflicts(firms, isAvailable) {
// START:find
const unavailable = [...firms].find(firm => {
const [id] = firm;
return !isAvailable(id);
});
if (unavailable) {
return `${unavailable[1]}는 사용할 수 없습니다`;
}
return '모든 회사를 사용할 수 있습니다';
// END:find
}
find() 메서드를 사용하여 서비스를 제공 받지 못하는 회사가 있는지 확인가능하다.
맵에는 펼침연산자를 사용 할 수 있게 해주는 MapIterator(맵이터레이터) 라는 속성이 있다.
맵이터레이터는 좀 더 일반화 된 이터레이터의 특정한 인스턴스이다.
이터레이터는 항목을 한 번에 하나씩 접근할 수 있는 특정한 형식의 객체이다.
function checkConflicts(firms, isAvailable) {
// START:for
for (const firm of firms) {
const [id, name] = firm;
if (!isAvailable(id)) {
return `${name}는 사용할 수 없습니다`;
}
}
return '모든 회사를 사용할 수 있습니다';
// END:for
}
export { firms, checkConflicts };
function checkConflicts(firms, isAvailable) {
// START:for
for (const id in firms) {
if (!isAvailable(parseInt(id, 10))) {
return `${firms[id]}는 사용할 수 없습니다`;
}
}
return '모든 회사를 사용할 수 있습니다';
// END:for
}
export { firms, checkConflicts };
두 개 모두 무조건적으로 사용하기 보다는 사용이 적절한 경우에만 선택해야한다.
주의해야할 점은 객체를 조작하는 것이다. 이는 매우 위험하고 특히 반복중인속성 외의 다른 속성을 추가,수정 하는 경우에는 버그가 빨리 퍼질 수 있다.
이 게시물은 자바스크립트 코딩의 기술 책을 요약한 내용입니다.