evolve

지정한 값만 키별 변환 함수에 통과시키고, Map의 나머지는 그대로 둡니다.

Map<K, Object?> evolve<K>( Map<K, Object? Function(Object? value)> transformations, Map<K, Object?> map)

강의

evolve는 "레시피" 맵 — 키에서 변환 함수로의 매핑 — 과 데이터 맵을 받아, 레시피에 등장하는 키의 값은 대응하는 함수를 거치고 나머지 키는 그대로 복사되는 새 맵을 만들어 냅니다.

시그니처가 일부러 느슨하다는 점에 주목하세요. 두 맵 모두 값 타입이 Object?인데, 동적 타입이던 FxTS 원본을 그대로 반영한 것입니다. 즉 변환 함수는 Object?를 받게 되고, 타입에 특화된 작업을 하려면 먼저 캐스팅해야 합니다(v as String, v as int, …). 하나의 맵 안에서 값 타입마다 다른 변환을 적용할 수 있는 유연함에 대한 작은 대가인 셈입니다. 데이터의 모양을 미리 알고 있고 키마다 다른 처리가 필요하지 않다면, 대개는 평범한 {...map, 'key': f(map['key'])} 전개가 더 Dart다운 표현입니다. 레시피 자체가 데이터일 때(예: 한 번 만들어 두고 여러 맵에 재사용할 때) evolve를 꺼내 쓰세요.

데모 1 · 기본

데모 2 · 원시 문자열 필드 파싱하기

직접 해 보기

연습: evolve'price' 필드를 두 배로 만들고 'title'은 그대로 두어 보세요.

관련 항목: prop — 값 하나를 꺼내 읽습니다 · omitBy — 변환하는 대신 엔트리를 버립니다 · compactObject — 특수한 목적의 정리 과정 · resolveProps — 변환 대신 await하는 비동기 사촌