mapValues와 친구들
맵의 값 전체, 키 전체, 또는 (key, value) 엔트리 전체를 변환합니다.
강의
9장의 나머지는 맵에서 골라내거나(pick,
omit,
pickBy,
omitBy) 일부를 읽습니다.
이 셋은 맵을 변환합니다. mapValues는 값마다 콜백을
돌리고 키는 건드리지 않으며, mapKeys는 그 반대,
mapEntries는 (key, value) 레코드를 통째로 받아 새
레코드를 돌려줍니다.
그 레코드는 pickBy, omitBy,
fromEntries가 이미 쓰는 것과
같은 모양입니다. 그래서 넷이 아무 변환 없이 이어집니다 — 하나로 거르고
다른 하나로 변환하면 됩니다. mapEntries는 나머지 둘을
일반화한 형태라서, e.$1과 e.$2를 맞바꾸면
한 번의 호출로 맵이 뒤집힙니다.
mapValues는 키를 건드리지 않으므로 엔트리를 잃을 일이
없습니다. mapKeys와 mapEntries는 다릅니다.
콜백이 두 키를 같은 결과로 보내면 순회 순서상 마지막
것이 이깁니다. 맵 리터럴에서 키가 겹쳤을 때와 똑같습니다. 그 밖에는
삽입 순서가 유지되며, 새 키가 처음 나타난 자리를 따릅니다.
filter나 filterWithKey는 일부러 두지
않았습니다. pickBy와 omitBy가 이미 레코드를
통째로 받으므로, 한쪽을 무시하는 것이 곧 다른 한쪽으로 거르는
방법입니다 — 두 번째 데모를 보세요.
바로 옆의 evolve와 비교해
보세요. 그쪽은 지정한 키의 값만 변환하고 나머지는 그대로
통과시킵니다. mapValues는 모든 값이 같은 처리를 받는
경우입니다.
데모 1 · 기본
데모 2 · 키 충돌, 그리고 곁들이는 필터
직접 해 보기
연습: 이름은 그대로 두고 점수를 등급 문자로 바꿔 보세요.
evolve — 지정한 키의 값만 변환 ·
pickBy / omitBy — 같은 레코드 모양의 키 인식 필터 ·
fromEntries — 레코드로 맵 만들기 ·
compactObject — null 값 걷어내기